vue3錨點定位兩種實現(xiàn)方式示例

    目錄 方法1: 利用ref實現(xiàn)錨點定位 前面的廢話文學(xué) 解決問題的方法 1. setup函數(shù)內(nèi)定義變量 2. 動態(tài)獲取ref并存放到eleRefs數(shù)組當(dāng)中 3. 滾動到特定的ref位置 方法2: 利用a標(biāo)簽實現(xiàn)錨點定位(
    目錄
    • 方法1: 利用ref實現(xiàn)錨點定位 前面的廢話文學(xué)
      • 解決問題的方法
      • 1. setup函數(shù)內(nèi)定義變量
      • 2. 動態(tài)獲取ref并存放到eleRefs數(shù)組當(dāng)中
      • 3. 滾動到特定的ref位置
    • 方法2: 利用a標(biāo)簽實現(xiàn)錨點定位(滾動響應(yīng))
      • 第二次的廢話文學(xué)
      • 解決問題的方法
      • 2.滾動響應(yīng)
    • 總結(jié)

      方法1: 利用ref實現(xiàn)錨點定位 前面的廢話文學(xué)

      說到錨點定位,很多人第一時間會想到 a標(biāo)簽。但是a標(biāo)簽實現(xiàn)的錨點定位并不是那么的完美,特別是在hash模式下。
      對我而言,vue3的ref就實在是太完美了。

      解決問題的方法

      很多情況下,我們會循環(huán)一定格式的數(shù)據(jù)對頁面進(jìn)行渲染,然后再有錨點定位的需求。那么我們該怎么去做呢?

      1. setup函數(shù)內(nèi)定義變量

      const eleRefs = ref([]);
      const setRef = (el) => {
        if (el) {
          eleRefs.value.push(el);
        }
      };
      //獲取變量值
      console.log(eleRefs.value[0])

      2. 動態(tài)獲取ref并存放到eleRefs數(shù)組當(dāng)中

       <template v-for="(item, index) in data.catalogue">
            <div class="part-cont" :id="'part' + item.id" :ref="setRef">
              <div class="part-box">
                <template v-for="(j, k) in item.picUrls" :key="k">
                  <img :src="http://news.558idc.com/j" alt="">
                </template>
              </div>
              <template v-for="(i, ind) in item.children">
                <div :id="'part' + i.id" :ref="setRef" class="part-box">
                  <template v-for="(j, k) in i.picUrls" :key="k">
                    <img :src="http://news.558idc.com/j" alt="">
                  </template>
                </div>
              </template>
            </div>
          </template>

      3. 滾動到特定的ref位置

      eleRefs.value[0].scrollIntoView({ block: 'start', behavior: 'smooth' });

      over

      方法2: 利用a標(biāo)簽實現(xiàn)錨點定位(滾動響應(yīng))

      第二次的廢話文學(xué)

      小編想了,還是想把a標(biāo)簽的錨點定位也記錄一下。

      無論是PC端、移動端,還是APP、小程序,只要涉及長篇文章/畫冊、tab切換等的都可能會有錨點定位的需求。我們前端就需要做到點擊錨點能定位,滾動頁面能響應(yīng)。

      解決問題的方法

      1. a標(biāo)簽 定位到指定位置

      // 錨記
      	<a  rel="external nofollow" >點擊此處到目標(biāo)位置</a>
      // 錨記位置
      	<div id="site"></div>

      2.滾動響應(yīng)

      監(jiān)聽滾動事件

      let currSite = document.documentElement.scrollTop || document.body.scrollTop // document.documentElement.scrollTop  // 當(dāng)前滾動位置
      let windowHeight =window.innerHeight||document.documentElement.clientHeight || document.body.clientHeight  // 視口高度
       // 獲取元素信息
       let ele = document.getElementById('site')
       let eleTop = ele.offsetTop // 元素距頁面頂部高度(頭部)
       let eleHeight = ele.clientHeight  // 元素高度
        let eleBot = eleHeight + eleTop  // 元素底部距頁面頂部高度(尾部)
      /* 判斷元素是否在可視區(qū)域:
      	1.元素內(nèi)嵌可視區(qū)域(首尾均在可視區(qū)域內(nèi))
      	2.元素外嵌可視區(qū)域(首位均在可視區(qū)域外)
      	3.元素頭部在可視區(qū)域內(nèi),尾部在可視區(qū)域外
      */
      if(eleTop >= currSite &&eleTop < currSite + windowHeight || (eleBot  > currSite &&eleBot < currSite + windowHeight) || (eleTop e < currSite && eleBot > currSite + windowHeight)){
      	 // 元素在可視區(qū)域
      }else{
      	// 元素不在可視區(qū)域
      }

      over

      總結(jié)

      到此這篇關(guān)于vue3錨點定位兩種實現(xiàn)方式的文章就介紹到這了,更多相關(guān)vue3錨點定位內(nèi)容請搜索技圈網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持技圈網(wǎng)!

      聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。
      發(fā)表評論
      更多 網(wǎng)友評論0 條評論)
      暫無評論

      返回頂部

      主站蜘蛛池模板: 色狠狠色噜噜Av天堂一区| 中文字幕一区日韩在线视频| 岛国精品一区免费视频在线观看| 熟女大屁股白浆一区二区| 精品久久一区二区| 亚洲中文字幕丝袜制服一区| 亚洲国产精品无码第一区二区三区| 精品一区二区三区AV天堂| 无码精品不卡一区二区三区 | 国产在线精品一区二区夜色| 日韩欧美一区二区三区免费观看| 国产精品视频一区二区三区四| 国产成人av一区二区三区不卡 | 在线日产精品一区| 无码人妻视频一区二区三区| 日韩精品无码一区二区三区AV| 国产麻豆剧果冻传媒一区| 国产成人久久一区二区不卡三区| 男女久久久国产一区二区三区| 无码少妇精品一区二区免费动态| 成人区精品人妻一区二区不卡| 三上悠亚亚洲一区高清| 国产在线精品一区二区高清不卡| 少妇人妻偷人精品一区二区| 国产人妖视频一区二区| 亚洲国产精品一区二区三区在线观看 | 日韩免费无码一区二区视频| 日韩一区二区免费视频| 国产一区二区三区在线看| 亚洲熟妇成人精品一区| 影院无码人妻精品一区二区| 丝袜人妻一区二区三区网站| 日韩精品一区二区三区中文| 在线免费观看一区二区三区| 亚洲AV无码一区二区三区国产| 亚洲综合无码精品一区二区三区 | 黄桃AV无码免费一区二区三区| 亚洲AV乱码一区二区三区林ゆな | 中文无码一区二区不卡αv| а天堂中文最新一区二区三区| 国产91精品一区二区麻豆网站 |