最近我试了下vue版的element-ui 2.15.3版,发现无限滚动组件有问题,不知道是我弄错了什么地方还是怎么了,后来查了下资料,重新修改了下就能用了,修改如下
<template>
<div>
<ul @scroll="myFc">
<li v-for="i in data" :key="i">{{ i }}</li>
</ul>
</div>
</template>
<script>
export default{
data(){
return {
data:20,
load:true
}
},
methods:{
myFc(el){
// .scrollHeight); 返回整个元素的高度
// .scrollTop); //返回当前视图中的实际元素的顶部边缘和顶部边缘之间的距离
// .clientHeight); //返回元素在页面上返回内容的可视高度
if(el.target.scrollHeight-el.target.scrollTop-el.target.clientHeight<5 && this.load){
this.load=false
setTimeout(()=>{
this.data+=2
this.load=true
},1000)
console.log(this.data);
}
}
}
}
</script>
<style lang="scss" scoped>
ul{
overflow: auto;
height: 200px;
}
</style>
纯js环境下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box{
height: 300px;
width: 200px;
/* border: 1px solid black; */
overflow: auto;
}
.content{
height: 400px;
width: 150px;
/* border: 1px solid red; */
}
</style>
</head>
<body>
<div onscroll="myFunction()" class="box" id="box">
<div class="content">内容</div>
</div>
<script>
let count=0
let load=true
function myFunction(){
let ul=document.querySelector(".box")
if(ul.scrollHeight-ul.scrollTop-ul.clientHeight<5 && load){
load=false
setTimeout(()=>{
count++
let newel=document.createElement("p")
newel.innerHTML=`这是新添加的第${count}个P元素`
ul.appendChild(newel)
load=true
},1000)
}
}
</script>
</body>
</html>
之所以要加一个load变量,是因为元素滚动事件会一直触发,所以要适当的控制下