天天看点

javascript 实现无限滚动效果

最近我试了下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变量,是因为元素滚动事件会一直触发,所以要适当的控制下

继续阅读