vue监听滚动事件 实现某元素吸顶或者固定位置显示

最近写了一个VUE的web app项目,需要实现某个部位吸顶的效果。即,页面往上滑动,刚好到达该部位时,该部分,固定在顶部显示。

 

1、监听滚动事件

利用VUE写一个在控制台打印当前的scrollTop,

首先,在mounted钩子中给window添加一个滚动滚动监听事件,

  1. mounted () {
  2. window.addEventListener('scroll', this.handleScroll)
  3. },

然后在方法中,添加这个handleScroll方法

  1. handleScroll () {
  2. var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
  3. console.log(scrollTop)
  4. },

 

控制台打印结果:

2、监听元素到顶部的距离  并判断滚动的距离如果大于了元素到顶部的距离时,设置searchBar为true,否则就是false

  1. handleScroll () {
  2. let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
  3. let offsetTop = document.querySelector('#searchBar').offsetTop
  4. scrollTop > offsetTop ? this.searchBarFixed = true : this.searchBarFixed = false
  5. },

先写一个该元素固定到顶部的样式,isFixed(less写法)

  1. .searchBar{
  2. .isFixed{
  3. position:fixed;
  4. background-color:#Fff;
  5. top:0;
  6. z-index:999;
  7. }
  8. ul {
  9. WIDTH:100%;
  10. height: 40px;
  11. line-height: 40px;
  12. display: flex;
  13. li {
  14. font-size: 0.8rem;
  15. text-align: center;
  16. flex: 1;
  17. i {
  18. font-size: 0.9rem;
  19. padding-left: 5px;
  20. color: #ccc;
  21. }
  22. }
  23. border-bottom: 1px solid #ddd;
  24. }
  25. }

 

然后将需要固定的元素的class与searchBar进行绑定,如果searchBar为true时,就应用这个isFixed样式

  1. <div class="searchBar" id="searchBar">
  2. <ul :class="searchBarFixed == true ? 'isFixed' :''">
  3. <li>区域<i class="iconfont icon-jiantouxia"></i></li>
  4. <li>价格<i class="iconfont icon-jiantouxia"></i></li>
  5. <li>房型<i class="iconfont icon-jiantouxia"></i></li>
  6. <li>更多<i class="iconfont icon-jiantouxia"></i></li>
  7. </ul>
  8. </div>

 

固定后的结果:

 

注意,如果离开该页面需要移除这个监听的事件,不然会报错。

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

 

 

 

posted @ 2021-03-10 09:39  LilLazy  阅读(335)  评论(0)    收藏  举报