使用监听 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>
运行效果