1. 程式人生 > >vue監聽滾動事件 實現某元素吸頂或者固定位置顯示

vue監聽滾動事件 實現某元素吸頂或者固定位置顯示

最近寫了一個VUE的web app專案,需要實現某個部位吸頂的效果。即,頁面往上滑動,剛好到達該部位時,該部分,固定在頂部顯示。


1、監聽滾動事件

利用VUE寫一個在控制檯列印當前的scrollTop,

首先,在mounted鉤子中給window新增一個滾動滾動監聽事件,

mounted () {
  window.addEventListener('scroll', this.handleScroll)
},
然後在方法中,新增這個handleScroll方法
handleScroll () {
  var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
  console.log(scrollTop)
},

控制檯列印結果:


2、監聽元素到頂部的距離  並判斷滾動的距離如果大於了元素到頂部的距離時,設定searchBar為true,否則就是false

handleScroll () {
  var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
  var offsetTop = document.querySelector('#searchBar').offsetTop
  if (scrollTop > offsetTop) {
    this
.searchBarFixed = true } else { this.searchBarFixed = false } },

先寫一個該元素固定到頂部的樣式,isFixed(less寫法)

.searchBar{
  .isFixed{
    position:fixed;
background-color:#Fff;
top:0;
z-index:999;
}
  ul {
    WIDTH:100%;
height: 40px;
line-height: 40px;
display: flex;
li {
      font-size: 0.8rem;
text-align: center
; flex: 1; i { font-size: 0.9rem; padding-left: 5px; color: #ccc; } } border-bottom: 1px solid #ddd; } }

然後將需要固定的元素的class與searchBar進行繫結,如果searchBar為true時,就應用這個isFixed樣式

<div class="searchBar" id="searchBar">
  <ul :class="searchBarFixed == true ? 'isFixed' :''">
    <li>區域<i class="iconfont icon-jiantouxia"></i></li>
    <li>價格<i class="iconfont icon-jiantouxia"></i></li>
    <li>房型<i class="iconfont icon-jiantouxia"></i></li>
    <li>更多<i class="iconfont icon-jiantouxia"></i></li>
  </ul>
</div>

固定後的結果:


注意,如果離開該頁面需要移除這個監聽的事件,不然會報錯。

destroyed () {
  window.removeEventListener('scroll', this.handleScroll)
},