为了账号安全,请及时绑定邮箱和手机立即绑定

Vue 四行代码实现无感知上拉加载更多

标签:
Vue.js

话不多说,直接上代码:

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

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


270

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


643


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 class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="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>



作者:坐不住的程序员
链接:https://www.jianshu.com/p/30aa13eedcf9


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 1
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消