Vue 无限滚动加载指令实现方法
也不存在什么加载咯,就是一个判断滚动条是否到达浏览器底部了。如果到了就触发事件,米到就不处理。
计算公式提简单的 底部等于(0)= 滚动条高度-滚动条顶部距离-可视高度。 反正结果就是0。
一、获取滚动条位置
classScroll{
staticgettop(){
returnMath.max(document.documentElement.scrollTop||document.body.scrollTop);
}
staticgetclientHeight(){
returnMath.max(document.documentElement.clientHeight||document.body.clientHeight);
}
staticgetclientWidth(){
returnMath.max(document.documentElement.clientWidth||document.body.clientWidth);
}
staticgetheight(){
returnMath.max(document.documentElement.scrollHeight||document.body.scrollHeight);
}
staticgetwidth(){
returnMath.max(document.documentElement.scrollWidth||document.body.scrollWidth);
}
staticgetbottom(){
returnScroll.height-Scroll.clientHeight-Scroll.top;
}
}
二、给根节点绑定滚动事件
vue给body元素绑定滚动条事件,真TMD草蛋。事件绑定上去了妈的就是不触发事件。不知道什么鬼问题。
最后直接给根节点HTML绑定滚动事件。
conston=(function(){
if(document.addEventListener){
returnfunction(element,event,handler){
if(element&&event&&handler){
element.addEventListener(event,handler,false);
}
};
}else{
returnfunction(element,event,handler){
if(element&&event&&handler){
element.attachEvent('on'+event,handler);
}
};
}
})();
三、注册全局指令
/**
*降低事件执行频率
*/
constdownsampler=(function(){
letresult=null;
returnfunction(time,func){
if(!result){
result=setTimeout(function(){
func();
result=null;
},time);
}
}
})();
Vue.directive("infinite-scroll",{
bind(el,binding,vnode){
on(window,'scroll',function(){
if(typeofbinding.value==="function"&&Scroll.bottom<=50){//小于50就触发
downsampler(50,binding.value);//降低触发频率
}
})
}
});
四、实例:
{{item}}
演示地址:http://whnba.gitee.io/tkspa/
总结
以上所述是小编给大家介绍的Vue无限滚动加载指令实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!