vue 導(dǎo)航錨點_點擊平滑滾動,導(dǎo)航欄對應(yīng)變化詳解
最終效果如下:(注意需要做錨點聯(lián)動的部分并不在頁面的頂部而是頁面的某個div內(nèi))-chrome
完成這個功能需要注意:
1、點擊導(dǎo)航平滑滾動到導(dǎo)航內(nèi)容處
2、div內(nèi)滾動時當(dāng)前導(dǎo)航需要做響應(yīng)
代碼如下:
1、html結(jié)構(gòu)(因為從項目里截取代碼,allMenuList數(shù)據(jù)內(nèi)容就不貼出來了,不算難點,這個可以根據(jù)自己的項目進行調(diào)整,相應(yīng)的方法和類名別弄錯就行)
<div class="all-title"> 全部應(yīng)用 <p class="fr"> <span v-for="(item, index) in allMenuList" :key="item.id" :class="[index===activeMenu?'active':'']" @click="jump(index)">{{ item.name }}</span> </p> </div> <div id="scrollBox" class="applications-content"> <div v-for="(val, index) in allMenuList" :key="val.id" class="all-list do-jump"> <p class="applications-title">{{ val.name }}</p> <ul class="applications-list"> <li v-for="item in val.children" :key="item.id" class="applications-item" @click="changeRouterForRight(item.pathName,item.menuCode)"> <img src=""> <span>{{ item.name }}</span> <template v-if="showEdit"> <i v-if="addOrRemove(item.menuCode)==0" class="el-icon-circle-plus add-btn" @click="addMenu(item.menuCode)" /> <i v-if="addOrRemove(item.menuCode)==1" class="el-icon-remove remove-btn" @click="removeMenu(item.menuCode)" /> </template> </li> </ul> </div> </div>
需要說明的數(shù)據(jù):activeMenu-當(dāng)前導(dǎo)航序號,scrollBox-需要在里面滾動的元素即設(shè)為overflow-y:scroll的父元素div
2、點擊導(dǎo)航平滑滾動的方法:jump(index)
// 跳轉(zhuǎn) jump(index) { this.activeMenu = index // 當(dāng)前導(dǎo)航 const jump = jQuery('.do-jump').eq(index) const scrollTop = jump.position().top + this.scrollBox.scrollTop // 獲取需要滾動的距離 // Chrome this.scrollBox.scrollTo({ top: scrollTop, behavior: 'smooth' // 平滑滾動 }) }
這里有兩點需要說明:一是因為我vue項目里裝了jquery所以這里直接用了jquery的position().top來獲取元素到父元素的距離,如果項目里沒裝jquery需要把這里換成js的方法來獲取元素到父元素的距離(萬事有Google和度娘),二是點擊之后需要滾動的距離計算時別忘了加上當(dāng)前div已經(jīng)滾動的距離即已經(jīng)被卷起的高度
-----到這里我們就可以實現(xiàn)1的功能
3、監(jiān)聽scrollBox的滾動:
寫在mounted里
// 獲取滾動dom元素 this.scrollBox = document.getElementById('scrollBox') const jump = jQuery('.do-jump') const topArr = [] for (let i = 0; i < jump.length; i++) { topArr.push(jump.eq(i).position().top) } // 監(jiān)聽dom元素的scroll事件 this.scrollBox.addEventListener('scroll', () => { const current_offset_top = that.scrollBox.scrollTop for (let i = 0; i < topArr.length; i++) { if (current_offset_top <= topArr[i]) { // 根據(jù)滾動距離判斷應(yīng)該滾動到第幾個導(dǎo)航的位置 that.activeMenu = i break } } }, true)
這里需要注意addEventListener里有三個參數(shù):'scroll' 、function、true
補充知識:vue搭建腳手架報錯:rollbackFailedOptinal:verb npm-session解決
vue搭建腳手架報錯:
rollbackFailedOptinal:verb npm-session
解決
如果你是在公司,而你的公司又用了代理連的外網(wǎng)
想辦法直接連外網(wǎng)吧,問題就是代理造成的
我用手機連電腦USB共享網(wǎng)絡(luò) 哎,心好累
以上這篇vue 導(dǎo)航錨點_點擊平滑滾動,導(dǎo)航欄對應(yīng)變化詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于在vue中實現(xiàn)過渡動畫的代碼示例
Vue是一款流行的前端框架,支持過渡動畫的實現(xiàn)是其中的一項重要特性,在Vue中,使用過渡動畫可以為用戶提供更加友好的用戶體驗,下面我將為大家介紹一下子如何在Vue中實現(xiàn)過渡動畫,需要的朋友可以參考下2023-06-06Vuepress 搭建帶評論功能的靜態(tài)博客的實現(xiàn)
這篇文章主要介紹了Vuepress 搭建帶評論功能的靜態(tài)博客的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02vue3??mark.js?實現(xiàn)文字標(biāo)注功能(案例代碼)
這篇文章主要介紹了vue3??mark.js?實現(xiàn)文字標(biāo)注功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-09-09Vue 2.0+Vue-router構(gòu)建一個簡單的單頁應(yīng)用(附源碼)
這篇文章主要給大家介紹了基于Vue 2.0+Vue-router構(gòu)建了一個簡單的單頁應(yīng)用,文中通過實例介紹的非常詳細,并在文末給出了源碼下載,需要的朋友可以下載學(xué)習(xí)參考,下面來一起看看吧。2017-03-03基于Vue.js與WordPress Rest API構(gòu)建單頁應(yīng)用詳解
這篇文章主要介紹了基于Vue.js與WordPress Rest API構(gòu)建單頁應(yīng)用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09Vue向后端傳數(shù)據(jù)后端接收為null問題及解決
這篇文章主要介紹了Vue向后端傳數(shù)據(jù)后端接收為null問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09