用Vue在移动端做滚动加载,使用mint-ui框架, InfiniteScroll指令loadmore组件,在uc浏览器和qq浏览器都无法触发。无奈我只能自己写了。

决定用vue 的自定义指令 写滚动加载。

核心的api

  • document.body.scrollTop 滚动条滚动的距离 (这个有兼容性问题,兼容性写法)

    let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
  • window.innerHeight  浏览器窗口高度
  • document.body.scrollHeight  内容高度 (兼容性写法)
    let bodyHeight = document.body.scrollHeight ||  document.documentElement.scrollHeight;

思路给window绑定滚动事件,用  if(滚动条高度 + 浏览器窗口高度 >= 内容高度 - 阈值)  作为判断条件。我们把自定义指令命名为 scroll

    directives: {
/**
* 滚动加载的自定义指令
*/
scroll: {
bind: function (el, binding, vnode) {
window.addEventListener('scroll', vnode.context.scrollLoad)
},
    //路由转跳到其他页面时,会调用unbind,解绑滚动加载事件。
unbind: function (el,binding, vnode) {
window.removeEventListener('scroll', vnode.context.scrollLoad)
}
}
},
methods: {
scrollLoad() {
//滚动条高度(页面被卷去高度)
let scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
//文档高度
let bodyHeight = document.body.scrollHeight || document.documentElement.scrollHeight; if (scrollTop + window.innerHeight >= bodyHeight - 50) {
//判断请求发送标志位,避免重复请求(这个需要自己在data里声明,直接贴代码会报错。默认为false,发送请求前改为true, 请求完成回调函数里改回false)
if (this.loading) return;
//发送请求
this.getnewsData();
},
getnewsData() {/*发送请求的函数*/}
},

有一个重点,因为发送请求和滚动事件的方法定义在了组件的methods中,需要拿到Vue实例,但在自定义指令里,不能通过this拿到Vue实例,而是通过指令钩子函数的第三个参数vnodecontext属性拿

必须要在unbind钩子中解绑滚动加载事件,否则在其他页面也会被触发。

使用 时,因为基于文档高度和滚动条高度,绑在哪里无所谓,这里绑定到容器上就可以了。

<template>
<section v-scroll>
<ul>
<template v-for="data in datas">
<li>
..........
</li>
</template>
</ul>
</section>
</template>

以上内容,转载请注明出处 https://www.cnblogs.com/lijinwen/p/8444400.html

Vue滚动加载自定义指令的更多相关文章

  1. 笔记-VUE滚动加载更多数据

    来源:https://blog.csdn.net/qq_17281881/article/details/87342403 VUE滚动加载更多数据 data() { return { loading: ...

  2. vue 滚动加载

    <template> <div class="wraper" @scroll="onScroll($event)"> <div c ...

  3. vue 滚动加载数据

    参考链接:https://www.npmjs.com/package/vue-infinite-scroll

  4. 基于 Vue.js 的移动端组件库mint-ui实现无限滚动加载更多

    通过多次爬坑,发现了这些监听滚动来加载更多的组件的共同点, 因为这些加载更多的方法是绑定在需要加载更多的内容的元素上的, 所以是进入页面则直接触发一次,当监听到滚动事件之后,继续加载更多, 所以对于无 ...

  5. Angular: 使用 RxJS Observables 来实现简易版的无限滚动加载指令

    我使用 angular-cli 来搭建项目. ng new infinite-scroller-poc --style=scss 项目生成好后,进入 infinite-scroller-poc 目录下 ...

  6. vue 原生添加滚动加载更多

    vue中添加滚动加载更多,因为是单页面所以需要在跳出页面时候销毁滚动,要不会出现错乱.我们在mounted建立滚动,destroyed销毁滚动. mounted () { window.addEven ...

  7. 关于Vue+iview的简单下拉框滚动加载

    话不多说,直接上代码,作用是下拉框内容无限滚动加载: Html: <FormItem style="position:relative" label="用户名:&q ...

  8. Vue无限滚动加载数据

    Web项目经常会用到下拉滚动加载数据的功能,今天就来种草Vue-infinite-loading 这个插件,讲解一下使用方法! 第一步:安装 npm install vue-infinite-load ...

  9. 在element-ui的select下拉框加上滚动加载

    在项目中,我们需要运用到很多来自后端返回的数据.有时是上百条,有时甚至上千条.如果加上后端的多表查询或者数据量过大,这就导致在前端的显示就会及其慢,特别是在网络不好的时候更是如此. 自然,后端就做了一 ...

随机推荐

  1. CentOS系统下安装SVN及常用命令

    1.SVN的安装: yum install subversion 2.服务端命令 svnserver -- 控制svn系统服务的启动等 svnadmin -- 版本库的创建.导出.导入.删除等 svn ...

  2. CSS页面重构“鑫三无准则”之“无图片”准则——张鑫旭

    一.再说关于“鑫三无准则” “鑫三无准则”这个概念貌似最早是在去年的去年一篇名叫“关于Google圆角高光高宽自适应按钮及其拓展”的文章中提过.这是自己在页面重构的经验中总结出来的一套约束自己CSS的 ...

  3. Linux之FineBI集群部署

    在企业应用中,通常单个计算机的配置是有限的,而企业应用又是高并发的需求,这个时候会通过计算机集群的方式来提高并发数,从而提高整体应用服务的性能.集群是将多台计算机作为一个整体来提供相关应用的服务.Fi ...

  4. JSPatch 可以让你用 JavaScript 书写原生 iOS APP

    简介   JSPatch 可以让你用 JavaScript 书写原生 iOS APP.只需在项目引入极小的引擎,就可以使用 JavaScript 调用任何 Objective-C 的原生接口,获得脚本 ...

  5. 一个Interface 继承多个Interface 的总结

    我们知道在Java中的继承都是单继承的,就是说一个父类可以被多个子类继承但是一个子类只能有一个父类.但是一个接口可以被不同实现类去实现,这就是我们说的Java中的多态的概念.下面我们再来说一下接口的多 ...

  6. 对JDBC的轻量级封装,Hibernate框架

    IDEA是真的好用... 用脑子下jar包..http://mvnrepository.com/

  7. 从Azure上构建Linux应用程序映像

    下图描述了总体的虚拟机的VHD映像生成以及发布到 Azure Azure 镜像市场的全过程: 具体步骤如下: 从Azure管理平台上Linux申请虚拟机, 安装和配置您要发布的应用软件产品,制作成映像 ...

  8. Vue2学习笔记:html属性

    1.使用 <!DOCTYPE html> <html> <head> <title></title> <meta charset=&q ...

  9. C# 希尔排序

    引用:对于大规模乱序数组插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点的从数组的一端移动到另一端.例如,如果主键最小的元素正好在数组的尽头,要将它挪到正确的位置就需要N-1次移动.希尔排 ...

  10. Linux 系统的网络基础_【all】

    网络基础 1.网线:568B: 白橙 橙色 白绿 蓝色 白蓝 绿色 白棕 棕色 2.交换机:电信号转发的网络设备,它可以为接入交换机的任2个网络节点设备提供电信号通信 3.路由器:连接局域网,广域网的 ...