zoukankan      html  css  js  c++  java
  • Vue 四行代码实现无感知上拉加载更多

    话不多说,直接上代码:

    //可滚动容器的高度
    let innerHeight = document.querySelector('#app').clientHeight;
    //屏幕尺寸高度
    let outerHeight = document.documentElement.clientHeight;
    //可滚动容器超出当前窗口显示范围的高度
    let scrollTop = document.documentElement.scrollTop;
    if (innerHeight < (outerHeight + scrollTop)) {
        //加载更多操作
        console.log("loadmore");
    }
    

    就这几行代码也没什么可说的,每个值在注释里面写的很清楚。

     

    接下来,从一张GIF图中来探寻上述几行代码是如何实现无感知上拉加载的:

     


    console中分别打印的是可滚动容器的高度innerHeight、屏幕尺寸的高度outerHeight、可滚动容器超出当前窗口显示范围的高度scrollTop。可以看到我选择的模拟器是iPhone5,屏幕高度568,这个值无论怎么滚动,都不会变。而scrollTop会随着滚动而增加,当滚动的底部无法再往下滚动时,这个数值停止增加,此时,innerHeight < (outerHeight + scrollTop),我们就可以使用这个条件进行上拉加载的操作了。
    最后,献上完整代码(粘贴复制就能看到效果):

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <p v-for="index in items">item{{ index }}</p>
        </div>
    
        <script>
            new Vue({
                el: '#app',
                data: {
                    items: 20
                },
    
                created() {
                    window.addEventListener('scroll', this.onScroll);
                },
    
                methods: {
                    onScroll() {
                        //可滚动容器的高度
                        let innerHeight = document.querySelector('#app').clientHeight;
                        //屏幕尺寸高度
                        let outerHeight = document.documentElement.clientHeight;
                        //可滚动容器超出当前窗口显示范围的高度
                        let scrollTop = document.documentElement.scrollTop;
                        //scrollTop在页面为滚动时为0,开始滚动后,慢慢增加,滚动到页面底部时,出现innerHeight < (outerHeight + scrollTop)的情况,严格来讲,是接近底部。
                        console.log(innerHeight + " " + outerHeight + " " + scrollTop);
                        if (innerHeight < (outerHeight + scrollTop)) {
                            //加载更多操作
                            console.log("loadmore");
                            this.items += 10;
    
                        }
                    }
                }
            })
        </script>
    </body>
    </html>
  • 相关阅读:
    算法——(转)动态规划入门
    iOS学习——(转)多线程
    iOS崩溃日志ips文件解析
    iOS学习——核心动画
    iOS学习——核心动画之Layer基础
    iOS学习——Quartz2D学习之UIKit绘制
    iOS学习——Quartz2D学习之DrawRect
    iOS模拟器使用
    (转)浅谈Session与Cookie的区别与联系
    Android Studio 受不了了
  • 原文地址:https://www.cnblogs.com/zlfProgrammer/p/11463112.html
Copyright © 2011-2022 走看看