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

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

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

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

    解決問題的方法

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

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

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

    2. 動(dòng)態(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. 滾動(dòng)到特定的ref位置

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

    over

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

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

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

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

    解決問題的方法

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

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

    2.滾動(dòng)響應(yīng)

    監(jiān)聽滾動(dòng)事件

    let currSite = document.documentElement.scrollTop || document.body.scrollTop // document.documentElement.scrollTop  // 當(dāng)前滾動(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錨點(diǎn)定位兩種實(shí)現(xiàn)方式的文章就介紹到這了,更多相關(guān)vue3錨點(diǎn)定位內(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 條評論)
    暫無評論

    返回頂部

    主站蜘蛛池模板: 天天操天天干天天干| 久久精品影院永久网址| 久久高清一区二区三区| 一区二区三区免费视频网站| www.亚洲日本| 欧美日韩国产精品自在自线| 日韩精品久久无码人妻中文字幕| 夭天曰天天躁天天摸在线观看| 国产成人精品综合久久久| 亚洲中文字幕久久精品无码va| www视频在线观看天堂| 黑人猛男大战俄罗斯白妞| 特级毛片爽www免费版| 日本一区视频在线| 国产中老年妇女精品| 丰满饥渴老女人hd| 绿巨人app黄| 日韩午夜r电影在线观看| 国产麻豆剧传媒精品网站| 午夜亚洲国产成人不卡在线| 久久精品夜色噜噜亚洲A∨| 高中生的放荡日记h| 欧美日韩在线免费观看| 国产精品先锋资源站先锋影院 | 人文艺术欣赏ppt404| 久久99国产视频| 精品熟人妻一区二区三区四区不卡| 日韩一区二区三区在线| 国产男女猛烈无遮挡| 亚洲精品成人网站在线观看 | 最近免费中文字幕完整7| 国产成人综合久久精品红| 久久亚洲国产成人精品无码区| 亚洲最大成人网色香蕉| 日韩免费高清一级毛片在线| 国产igao为爱做激情| 五月婷婷激情视频| 你懂的中文字幕| 欧美色视频在线| 国产日韩欧美视频二区| 亚洲欧美一区二区三区在线 |