Vue滾動(dòng)頁(yè)面到指定位置的實(shí)現(xiàn)及避坑
Vue滾動(dòng)頁(yè)面到指定位置
在Vue中,有三種方式可以實(shí)現(xiàn)H5頁(yè)面滑動(dòng)至指定位置
方法1
//先獲取目標(biāo)位置距離 mounted() { ? this.$nextTick(() => { ? ? ?setTimeout(() => { ? ? ? ? let targetbox= document.getElementById('targetbox'); ? ? ? ? this.target= targetbox.offsetTop; ? ? ? ? ? ?}) ? }) } //再滑動(dòng)指定距離 document.body.scrollTop = this.target;
方法2
this.$nextTick(() => { ? ? ?this.$refs.DOM.scrollTo(0,200); })
方法3
document.getElementById("target").scrollIntoView();
避坑指南
方法1,滑動(dòng)至的元素不能是display:none,存在兼容問(wèn)題,親測(cè)在部分ios機(jī)子上document.body.scrollTop滑動(dòng)無(wú)效。
方法2,未親測(cè)過(guò),但在this.$nextTick(()里執(zhí)行滑動(dòng),感覺(jué)有點(diǎn)麻煩。
方法3,親測(cè)可用,ios和android都可。只是要注意,如果頁(yè)面有監(jiān)聽(tīng)scroll事件,scrollIntoView也會(huì)觸發(fā)scroll事件的。
滾動(dòng)頁(yè)面到一定距離后固定
1.id名為testNavBar的盒子與:class=’{ fixedNavbar: isfixTab }'的盒子可以是包含關(guān)系也可以是并列關(guān)系
?<div id='testNavBar'></div> ? ? ? <div class="container " ?:class='{ fixedNavbar: isfixTab ?}'> ? ?</div>
或者
<div id='testNavBar'> ?? ?<div :class='{ fixedNavbar: isfixTab }'>這是導(dǎo)航</div> </div>
2.fixedNavbar是類名
.fixedNavbar { ? ? ? background-color: #f3f3f3; ? ? ? position: fixed; ? ? ? width: 100%; ? ? ? z-index: 2032; ? ? ? top: 0; ? ? ? left: 0; ? ? ? padding-bottom: 10px; ? ? }
3.isfixTab 是控制是否加類名
?data() { ? ? return { ? ? ? isnavshow: false, ? ? ? cateList:[], ? ? ? cateInfo:[], ? ? ? config_list:{}, ? ? ? isfixTab:false ? ? } ? },
4.在mounted中監(jiān)聽(tīng)頁(yè)面滾動(dòng)事件,并調(diào)用handleTabFix() 方法
? // 監(jiān)聽(tīng)頁(yè)面滾動(dòng) ? ? mounted () { ? ? ? ? window.addEventListener('scroll', this.handleTabFix, true) ? ? }, ? ? //離開(kāi)當(dāng)前組件前一定要清除滾動(dòng)監(jiān)聽(tīng),否則進(jìn)入其他路由會(huì)報(bào)錯(cuò) ? ? beforeRouteLeave (to, from, next) { ? ? ? window.removeEventListener('scroll', this.handleTabFix, true) ? ? ? next() ? ? },
5.聲明一個(gè)方法handleTabFix()
?// 先分別獲得id為testNavBar的元素距離頂部的距離和頁(yè)面滾動(dòng)的距離 ?? ? ? ?// 比較他們的大小來(lái)確定是否添加fixedNavbar樣式 ? ? handleTabFix() { ? ? ? var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop ? ? ? var offsetTop = document.querySelector('#testNavBar').offsetTop ? ? ? scrollTop > offsetTop ? this.isfixTab = true : this.isfixTab = false ? ? }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Vue3點(diǎn)擊側(cè)邊導(dǎo)航欄完成切換頁(yè)面內(nèi)組件全過(guò)程(WEB)
- Vue實(shí)現(xiàn)點(diǎn)擊導(dǎo)航欄當(dāng)前標(biāo)簽后變色功能
- vue 導(dǎo)航錨點(diǎn)_點(diǎn)擊平滑滾動(dòng),導(dǎo)航欄對(duì)應(yīng)變化詳解
- Vue實(shí)現(xiàn)導(dǎo)航欄點(diǎn)擊當(dāng)前標(biāo)簽變色功能
- Vue滾動(dòng)到指定位置的多種方式示例詳解
- vue實(shí)現(xiàn)滾動(dòng)條到頂部或者到指定位置
- vue實(shí)現(xiàn)點(diǎn)擊導(dǎo)航欄滾動(dòng)頁(yè)面到指定位置的功能(推薦)
相關(guān)文章
vue使用neovis操作neo4j圖形數(shù)據(jù)庫(kù)及優(yōu)缺點(diǎn)
這篇文章主要介紹了vue使用neovis操作neo4j圖形數(shù)據(jù)庫(kù),本文給大家介紹了與常規(guī)做法的優(yōu)缺點(diǎn)對(duì)比及使用技巧,對(duì)vue?neo4j圖形數(shù)據(jù)庫(kù)相關(guān)知識(shí)感興趣的朋友一起看看吧2022-02-02解決vue.js在編寫過(guò)程中出現(xiàn)空格不規(guī)范報(bào)錯(cuò)的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決vue.js在編寫過(guò)程中出現(xiàn)空格不規(guī)范報(bào)錯(cuò)的問(wèn)題。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Vue組件之間的參數(shù)傳遞與方法調(diào)用的實(shí)例詳解
這篇文章主要介紹了Vue組件之間的參數(shù)傳遞與方法調(diào)用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12vue中vite.config.js配置跨域以及環(huán)境配置方式
這篇文章主要介紹了vue中vite.config.js配置跨域以及環(huán)境配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04vite配置別名并處理報(bào)錯(cuò):找不到模塊“xxx”或其相應(yīng)的類型聲明方法詳解
我在學(xué)習(xí)vue3+vite+ts的時(shí)候,在配置別名這一步的時(shí)候遇到了一個(gè)問(wèn)題,這篇文章主要給大家介紹了關(guān)于vite配置別名并處理報(bào)錯(cuò):找不到模塊“xxx”或其相應(yīng)的類型聲明的相關(guān)資料,需要的朋友可以參考下2022-11-11