個人github地址vue
Aim:實現移動端滑到某一個位置實現貼合導航條效果。git
效果圖以下:github
方案:bash
1.監聽滾動條移動距離,當達到觸發距離,將tab欄fixed。dom
2.定時器實時監聽tab欄距離頂部距離。ide
3.只適配移動端下的touchmove事件,觸發判斷tab距離頂部距離。函數
實現:佈局
嘗試了監聽scroll 監聽 某個函數 以下,無效果,懷疑是層級dom定位。性能
且監聽成功距離一直爲0.ui
提供代碼記錄:
mounted(){
this.$refs.content.addEventListener('scroll',this.handleScroll,true)
},
methods:{
handleScroll(e){
console.log(e)
}
}複製代碼
方案二:
這是最後才考慮的一種,經過定時器監聽,性能太差。由於方案三實現,沒作嘗試。
方案三:
created(){
this.$nextTick(()=>{
// document.querySelectorAll('.vue-slider-piecewise-dot').style.borderRadius = 0;
[25,50,75].forEach((v,k)=>{
document.querySelectorAll('.vue-slider-piecewise-item')[v].style.zIndex=3;
document.querySelectorAll('.vue-slider-piecewise-dot')[v].style.background = 'rgb(229, 235, 245)'
document.querySelectorAll('.vue-slider-piecewise-dot')[v].style.width = '15px'
document.querySelectorAll('.vue-slider-piecewise-dot')[v].style.height = '15px'
document.querySelectorAll('.vue-slider-piecewise-dot')[v].style.borderRadius = '15px'
})
// 實現貼合監聽
this.box = this.$refs.content; // box是貼合的導航條
document.querySelector('#gemtrans').addEventListener('touchmove',() => { // 監聽整個單頁
console.log(this.box.getBoundingClientRect().top)
let top = this.box.getBoundingClientRect().top; // 獲取頂部距離
if(top<=48){
document.querySelector('.v-tabs__bar').style.position = 'fixed'
document.querySelector('.v-tabs__bar').style.top= '49px'
document.querySelector('.v-tabs__bar').style.width= '100%'
document.querySelector('.v-tabs__bar').style.zIndex= 3
}else {
document.querySelector('.v-tabs__bar').style.position = 'relative'
document.querySelector('.v-tabs__bar').style.top= 'initial'
document.querySelector('.v-tabs__bar').style.width= 'initial'
document.querySelector('.v-tabs__bar').style.zIndex= 'initial'
}
})
})
},複製代碼
網上大可能是方案一,或者採用插件,但由於項目佈局的緣由不是很通用,採用方案三,簡單實現效果也不錯了~