記vue下懸浮貼合頂部實現

個人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'
      }
    })
    
  })

},複製代碼


網上大可能是方案一,或者採用插件,但由於項目佈局的緣由不是很通用,採用方案三,簡單實現效果也不錯了~

相關文章
相關標籤/搜索