JS监听元素滚动

使用监听 scroll 可以实现监听页面滚动或者元素滚动是否到底

案例代码

<template>
  <div class="app-container">
    <div class="box">
      <div v-for="(item,index) in count" :key="index" class="item">
        {{ item }}
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "test",
  data() {
    return {
      count: 20
    }
  },
  mounted() {
    this.handlerNodeScroll()
  },
  methods: {
    // 监听元素滚动
    handlerNodeScroll() {
      let that = this
      // 函数防抖
      let fun = that.debounce(e => {
        // 距顶部
        let scrollTop = e.target.scrollTop;
        // 可视区高度
        let clientHeight = e.target.clientHeight;
        // 滚动条总高度
        let scrollHeight = e.target.scrollHeight;
        // 如果当前距离顶部的值加上可视区域的值大于等于总高度,则任务滚动条触底
        if (Math.ceil(scrollTop + clientHeight) >= scrollHeight) {   //容差:20px
          console.log('滚动到底部');
          if (that.count >= 50) return
          that.count += 10
        }
      }, 500)
      
      // 监听滚动
      let box = document.querySelector(".box");
      box.addEventListener("scroll", function (e) {
        fun(e)
      })
    },
    // 函数防抖
    debounce(handle, delay) {
      let timer = null;
      return function () {
        let _self = this,
          _args = arguments;
        clearTimeout(timer);
        timer = setTimeout(function () {
          handle.apply(_self, _args)
        }, delay)
      }
    }
  }
}
</script>

<style scoped lang="scss">
.box {
  width: 200px;
  height: 400px;
  border: 1px solid #7c7c7c;
  padding: 15px;
  box-sizing: border-box;
  overflow: auto;

  .item {
    margin-bottom: 10px;
    height: 40px;
    line-height: 40px;
    text-align: center;
    background-color: #1482f0;
    font-size: 18px;
    font-weight: 700;
    color: white;
  }
}
</style>

运行效果

8558467.jpg

  • 7
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值