Vue 无限滚动加载指令实现方法


Posted in Javascript onMay 28, 2019

也不存在什么加载咯, 就是一个判断滚动条是否到达浏览器底部了。 如果到了就触发事件,米到就不处理。

计算公式提简单的   底部等于(0) =  滚动条高度 - 滚动条顶部距离 - 可视高度。  反正结果就是0。

一、获取滚动条位置

class Scroll {
  static get top() {
    return Math.max(document.documentElement.scrollTop || document.body.scrollTop);
  }
  static get clientHeight() {
    return Math.max(document.documentElement.clientHeight || document.body.clientHeight);
  }
  static get clientWidth() {
    return Math.max(document.documentElement.clientWidth || document.body.clientWidth);
  }
  static get height() {
    return Math.max(document.documentElement.scrollHeight || document.body.scrollHeight);
  }
  static get width() {
    return Math.max(document.documentElement.scrollWidth || document.body.scrollWidth);
  }
  static get bottom() {
    return Scroll.height - Scroll.clientHeight - Scroll.top;
  }
}

二、给根节点绑定滚动事件

vue给body元素绑定滚动条事件,真TMD草蛋。事件绑定上去了 妈的 就是不触发事件。不知道什么鬼问题。

最后直接给根节点HTML绑定滚动事件。

const on = (function () {
  if (document.addEventListener) {
    return function (element, event, handler) {
      if (element && event && handler) {
        element.addEventListener(event, handler, false);
      }
    };
  } else {
    return function (element, event, handler) {
      if (element && event && handler) {
        element.attachEvent('on' + event, handler);
      }
    };
  }
})();

三、注册全局指令

/**
 * 降低事件执行频率
 */
const downsampler = (function () {
  let result = null;
  return function (time, func) {
    if (!result) {
      result = setTimeout(function () {
        func();
        result = null;
      }, time);
    }
  }
})();

Vue.directive("infinite-scroll", {
  bind(el, binding, vnode) {
    on(window, 'scroll', function () {
      if (typeof binding.value === "function" && Scroll.bottom <= 50) {  // 小于50就触发
        downsampler(50, binding.value); // 降低触发频率
      }
    })
  }
});

四、实例:

<div class="app" v-infinite-scroll="coupon">
    <template v-for="item in goods">
      <p>{{item}}</p>
   </template>
</div>
    let v = new Vue({
      el: ".app",
      data(){
        return {
          goods:[]
        }
      },
      methods: {
        coupon() {
          this.goods.push("你呵呵")
        }
      }
    })

演示地址:http://whnba.gitee.io/tkspa/

总结

以上所述是小编给大家介绍的Vue 无限滚动加载指令实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
浅谈javascript 函数表达式和函数声明的区别
Jan 05 Javascript
JavaScript Math 对象常用方法总结
Apr 28 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
Jun 03 Javascript
Vue实现typeahead组件功能(非常靠谱)
Aug 26 Javascript
vue.js如何将echarts封装为组件一键使用详解
Oct 10 Javascript
微信小程序scroll-view组件实现滚动动画
Jan 31 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
May 09 Javascript
swiper 自动图片无限轮播实现代码
May 21 Javascript
详解easyui 切换主题皮肤
Apr 04 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
May 12 Javascript
Vue.js如何使用Socket.IO的示例代码
Sep 05 Javascript
JS异步宏队列与微队列原理区别详解
Jul 02 Javascript
vue实现搜索过滤效果
May 28 #Javascript
微信小程序 image组件遇到的问题
May 28 #Javascript
vue实现搜索功能
May 28 #Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
May 28 #Javascript
如何实现双向绑定mvvm的原理实现
May 28 #Javascript
vue实现带复选框的树形菜单
May 27 #Javascript
vue实现按需加载组件及异步组件功能
May 27 #Javascript
You might like
改造一台复古桌面收音机
2021/03/02 无线电
PHP类的使用 实例代码讲解
2009/12/28 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
jQuery 前的按键判断代码
2010/03/19 Javascript
用jquery存取照片的具体实现方法
2013/06/30 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
Position属性之relative用法
2015/12/14 Javascript
JS原型链怎么理解
2016/06/27 Javascript
jquery获取easyui日期控件的值实现方法
2016/11/09 Javascript
详解使用angularjs的ng-options时如何设置默认值(初始值)
2017/07/18 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
vue 下列表侧滑操作实例代码详解
2018/07/24 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
在微信小程序中渲染HTML内容的方法示例
2018/09/28 Javascript
[19:14]DOTA2 HEROS教学视频教你分分钟做大人-维萨吉
2014/06/24 DOTA
Python版的文曲星猜数字游戏代码
2013/09/02 Python
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
Python基类函数的重载与调用实例分析
2015/01/12 Python
Python中使用partial改变方法默认参数实例
2015/04/28 Python
Linux中Python 环境软件包安装步骤
2016/03/31 Python
python实现rsa加密实例详解
2017/07/19 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
2019/08/24 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
后勤主管岗位职责
2014/03/01 职场文书
销售经理岗位职责
2015/01/31 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
golang 实现并发求和
2021/05/08 Golang
Linux磁盘管理方法介绍
2022/06/01 Servers
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript