欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue實現(xiàn)點擊導(dǎo)航欄滾動頁面到指定位置的功能(推薦)

 更新時間:2023年11月07日 12:05:39   作者:阿 湫  
這篇文章主要介紹了vue實現(xiàn)點擊導(dǎo)航欄滾動頁面到指定位置的功能(推薦),步驟一是是通過獲取不同板塊的滾輪高度,步驟二通過編寫執(zhí)行滾動操作的函數(shù),結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下

實現(xiàn)效果

在這里插入圖片描述

具體實現(xiàn)步驟

step1:獲取不同板塊的滾輪高度

當編寫好html部分后,我們創(chuàng)建一個可以獲取當前滾輪位置的方法handleScroll(),并在mounted鉤子函數(shù)中添加該方法的監(jiān)聽事件

methods: {
  handleScroll() {
      var scrollTop = document.documentElement.scrollTop;
      this.scrollHeight = scrollTop;
      console.log('當前滾輪高度:',this.scrollHeight); // 使用后記得注釋掉哦
  },
},
mounted(){
   window.addEventListener("scroll", this.handleScroll);
}

創(chuàng)建好監(jiān)聽事件后,我們手動滑動網(wǎng)頁右側(cè)滾動條到各版塊位置,并打印當前板塊的滾輪高度

 // 獲取到到的各版塊滾輪高度
 // area1 scrollHeight == 208.3813934326172
 // area2 scrollHeight == 960.2766723632812
 // area3 scrollHeight == 1637.001708984375
 // area4 scrollHeight == 2305.38330078125

step2:編寫執(zhí)行滾動操作的函數(shù)

1、具體思路

  ① 獲取到當前滾輪位置后,計算其位置與目標區(qū)域位置的高度差 x
  ② 進行 n 次循環(huán),不斷減去設(shè)定的最小移動單位 dx ,來縮減它們之間的高度差,直至為 0
  ③ 但需要注意的是:因不同位置獲取到滾輪的高度不固定,所以 n -1 次減去最小移動單位 dx 后,高度差不一定為零,即 0 < x < dx (此時的高度差:是高度差對最小移動單位取余的余數(shù)),所以在執(zhí)行滾動前,需要先將高度差減去余數(shù),才能保證通過n次循環(huán),剛好能到達指定位置( x = 0)

2、實現(xiàn)方法

  通過定時器進行 n 次循環(huán),高度差不斷減去最小移動距離至 0,同時控制滾動條不斷靠近目標位置(即向目標位置加/減單位距離)

這里先定義好需要使用的變量

data(){
	return {
	  scrollHeight:0, //當前滾輪高度
      metaHeight:15,  //最小滾動距離
      metaTime: 10,   //最小執(zhí)行時間
      targetHeight:0,     //目標區(qū)域滾輪高度
	}
}

編寫滾動方法

 toArea(index) { // 這里的index是左側(cè)導(dǎo)航欄傳的參數(shù),是不同區(qū)域設(shè)定好的索引值
      switch (index) { // 匹配不同區(qū)域的滾輪高度
        case 1: //區(qū)域一
          this.targetHeight= 208  //這里將第一步獲取到的滾輪高度取整
          break;
        case 2: //區(qū)域二
          this.targetHeight= 960
          break;
        case 3: //區(qū)域三
          this.targetHeight= 1637
          break;
        case 4: //區(qū)域四
          this.targetHeight= 2305
          break;
        default: //默認:區(qū)域一
          this.targetHeight= 208
          break;
      }
      // 判斷執(zhí)行情況
      // 當指定區(qū)域和當前滾動條位置一致時
      if( (document.documentElement.scrollTop===208&&this.targetHeight === 208)||
          (document.documentElement.scrollTop===960&&this.targetHeight === 960)||
          (document.documentElement.scrollTop===1637&&this.targetHeight === 1637))
      {
        console.log('已經(jīng)到達該區(qū)域了哦')
      }
      // 當指定區(qū)域高度大于當前滾動條位置時(即目標區(qū)在當前滾輪的下方)
      else if(this.targetHeight> this.scrollHeight){
        // 計算高度差
        let x = this.targetHeight- this.scrollHeight;
        // 先加上余數(shù),保證高度差能整除設(shè)定的最小移動單位
        document.documentElement.scrollTop += x%this.metaHeight;
        x -= x%this.metaHeight;
        const goto = setInterval(() => { // 建立執(zhí)行操作的定時器
          document.documentElement.scrollTop  += this.metaHeight; // 控制移動滾動條
          x-= this.metaHeight; // 縮減高度差
          if (x == 0) { // 到達指定位置后清除定時器
            clearInterval(goto); //清除定時器
          }
        }, this.metaTime);
      }
      // 當指定區(qū)域高度小于當前滾動條位置時(即目標區(qū)在當前滾輪的上方)
      else{
        // 計算高度差
        let x = this.scrollHeight - this.targetHeight;
        // 先減去余數(shù),保證高度差能整除設(shè)定的最小移動單位
        document.documentElement.scrollTop -= x%this.metaHeight;
        x -= x%this.metaHeight;
        const goto = setInterval(() => {
          document.documentElement.scrollTop -= this.metaHeight;
          x-= this.metaHeight;
          if (x == 0) {
            clearInterval(goto); //清除定時器
          }
        }, 1);
      }
    },

為導(dǎo)航欄添加點擊事件 @click

<div id="leftNavbar" v-show="scrollHeight > 200">
    <div v-for="(item,index) in navBarList" :key="index" :id="item.id" 
    	@click="toArea(item.index)">
        {{ item.title }}
    </div>
</div>
data(){
return {
	 navBarList:
	 [{
          id:"lnb1",
          title:"教育",
          index:1
        },
        {
          id:"lnb2",
          title:"歷史",
          index:2
        },
        {
          id:"lnb3",
          title:"風景",
          index:3
        },
        {
          id:"lnb4",
          title:"文創(chuàng)",
          index:4
        }],
}

OK到這里就實現(xiàn)了在頁面不同位置點擊左側(cè)導(dǎo)航欄,滾動頁面到對應(yīng)板塊(指定位置),并可以自定義滾動操作的速度和距離。各位朋友覺得有幫助到您的話,勞煩點個贊贊鼓勵一下吧,嘻嘻。

到此這篇關(guān)于vue 兩步實現(xiàn)點擊導(dǎo)航欄,滾動頁面到指定位置的功能的文章就介紹到這了,更多相關(guān)vue點擊導(dǎo)航欄滾動指定位置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue3的ref、isRef、toRef、toRefs、toRaw詳細介紹

    vue3的ref、isRef、toRef、toRefs、toRaw詳細介紹

    本文詳細講解了vue3的ref、isRef、toRef、toRefs、toRaw,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • vue跳轉(zhuǎn)時根據(jù)url錨點(#xxx)實現(xiàn)頁面內(nèi)容定位的方法

    vue跳轉(zhuǎn)時根據(jù)url錨點(#xxx)實現(xiàn)頁面內(nèi)容定位的方法

    本前端仔在做頁面跳轉(zhuǎn)的時候,被要求跳轉(zhuǎn)到頁面時候,把對應(yīng)部分的內(nèi)容自動滾動到頂部,我一開始想到的就是根據(jù)錨點<a href="#xxid">進行處理,但是發(fā)現(xiàn)不太好實現(xiàn),于是便自己研究了一個比較取巧的方法,需要的朋友可以參考下
    2024-04-04
  • Vue表情輸入組件 微信face表情組件

    Vue表情輸入組件 微信face表情組件

    這篇文章主要為大家詳細介紹了Vue表情輸入組件,微信face表情組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • vue2里面ref的具體使用方法

    vue2里面ref的具體使用方法

    本篇文章主要介紹了vue2里面ref的具體使用方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 在vue中使用?jquery?的兩種方法小結(jié)

    在vue中使用?jquery?的兩種方法小結(jié)

    這篇文章主要介紹了在vue中使用?jquery?的兩種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue3?setup中使用響應(yīng)式的方法

    vue3?setup中使用響應(yīng)式的方法

    文章主要介紹了Vue3中的響應(yīng)式數(shù)據(jù)處理機制,包括ref和reactive函數(shù)的使用,它們的區(qū)別,以及如何使用watch和watchEffect來監(jiān)聽數(shù)據(jù)變化,文章最后提到了Vue3的生命周期鉤子和自定義hooks的概念,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Vue重要修飾符.sync對比v-model的區(qū)別及使用詳解

    Vue重要修飾符.sync對比v-model的區(qū)別及使用詳解

    這篇文章主要為大家介紹了Vue中重要修飾符.sync與v-model的區(qū)別對比及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • vue項目的創(chuàng)建的步驟(圖文教程)

    vue項目的創(chuàng)建的步驟(圖文教程)

    本文主要介紹了vue項目的創(chuàng)建的步驟(圖文教程),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue中自定義右鍵菜單插件

    vue中自定義右鍵菜單插件

    這篇文章主要為大家詳細介紹了vue中自定義右鍵菜單插件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue獲取驗證碼倒計時組件

    vue獲取驗證碼倒計時組件

    這篇文章主要為大家詳細介紹了vue獲取驗證碼倒計時組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論