最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

實現(xiàn)效果

在這里插入圖片描述

具體實現(xiàn)步驟

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

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

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

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

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

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

1、具體思路

  ① 獲取到當(dāng)前滾輪位置后,計算其位置與目標區(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, //當(dāng)前滾輪高度
      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í)行情況
      // 當(dāng)指定區(qū)域和當(dāng)前滾動條位置一致時
      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ū)域了哦')
      }
      // 當(dāng)指定區(qū)域高度大于當(dāng)前滾動條位置時(即目標區(qū)在當(dāng)前滾輪的下方)
      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);
      }
      // 當(dāng)指定區(qū)域高度小于當(dāng)前滾動條位置時(即目標區(qū)在當(dāng)前滾輪的上方)
      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:"風(fēng)景",
          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)文章

  • elementUI table如何給表頭添加氣泡顯示

    elementUI table如何給表頭添加氣泡顯示

    這篇文章主要介紹了elementUI table如何給表頭添加氣泡顯示問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue動態(tài)加載路由的3種方式總結(jié)

    vue動態(tài)加載路由的3種方式總結(jié)

    這篇文章主要介紹了vue動態(tài)加載路由的3種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue在取對象長度length時候出現(xiàn)undefined的解決

    vue在取對象長度length時候出現(xiàn)undefined的解決

    這篇文章主要介紹了vue在取對象長度length時候出現(xiàn)undefined的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • vue3父子同信的雙向數(shù)據(jù)的項目實現(xiàn)

    vue3父子同信的雙向數(shù)據(jù)的項目實現(xiàn)

    我們知道的是,父傳子的通信,和子傳父的通信,那如何實現(xiàn)父子相互通信的呢,本文就來詳細的介紹一下,感興趣的可以了解一下
    2023-08-08
  • vue中本地靜態(tài)圖片的路徑應(yīng)該怎么寫

    vue中本地靜態(tài)圖片的路徑應(yīng)該怎么寫

    這篇文章主要介紹了vue中本地靜態(tài)圖片的路徑應(yīng)該怎么寫,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Vue代理報錯404問題及解決(vue配置proxy)

    Vue代理報錯404問題及解決(vue配置proxy)

    這篇文章主要介紹了Vue代理報錯404問題及解決(vue配置proxy),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 從Echarts報錯中學(xué)習(xí)Vue3?ref和shallowRef區(qū)別及其組件二次封裝demo

    從Echarts報錯中學(xué)習(xí)Vue3?ref和shallowRef區(qū)別及其組件二次封裝demo

    這篇文章主要介紹了從Echarts報錯中學(xué)習(xí)Vue3?ref和shallowRef區(qū)別及其組件二次封裝demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 在 Vue3 中如何使用 styled-components

    在 Vue3 中如何使用 styled-components

    styled-components 的官方 Vue 版本目前已多年沒有更新,而且只支持到 Vue2,那么,在 Vue3 中怎么才能使用到 styled-components 呢,下面給大家介紹在 Vue3 中使用 styled-components的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Vue實現(xiàn)雙向綁定的方法

    Vue實現(xiàn)雙向綁定的方法

    這篇文章主要介紹了Vue實現(xiàn)雙向綁定的方法,了解vue的雙向數(shù)據(jù)綁定原理以及核心代碼模塊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • vuex狀態(tài)管理淺談之mapState用法

    vuex狀態(tài)管理淺談之mapState用法

    當(dāng)一個組件需要獲取多個狀態(tài)的時候,將這些狀態(tài)都聲明為計算屬性會有些重復(fù)和冗余,為了解決這個問題我們可以使用mapState輔助函數(shù)幫助我們生成計算屬性,這篇文章主要給大家介紹了關(guān)于vuex狀態(tài)管理之mapState用法的相關(guān)資料,需要的朋友可以參考下
    2023-12-12

最新評論

山丹县| 正蓝旗| 大竹县| 上虞市| 湖口县| 大理市| 定结县| 阳曲县| 佛冈县| 容城县| 景东| 霍邱县| 枝江市| 佛坪县| 库伦旗| 旌德县| 余姚市| 平江县| 龙里县| 昂仁县| 冷水江市| 沧源| 东乡| 新兴县| 梧州市| 平湖市| 凤庆县| 太谷县| 岳池县| 印江| 连平县| 樟树市| 新和县| 曲水县| 琼结县| 澄迈县| 甘泉县| 财经| 武宣县| 汶川县| 柘荣县|