vue实现瀑布流组件滑动加载更多
建议先看vue瀑布流组件上拉加载更多再来食用本文,如果直接想看源码文末就是~
文末新增组件优化,之所以没有删优化前的代码是想让以后自己还能看到走过的路。
上一篇讲到在项目中使用上拉加载更多组件,但是由于实际项目开发中由于需求变更或者说在webview中上拉加载有些机型在上拉时候会把webview也一起上拉导致上拉加载不灵敏等问题,我们有时候也会换成滑动到底部自动加载的功能。
既然都是加载更多,很多代码思想势必相似,主要区别在于上拉和滑动到底部这个操作上,所以,我们需要注意:
1、上拉加载是point指针touch触摸事件,现在因为是滑动加载,需要添加scroll事件去监听然后执行相应回调
2、上拉加载主要计算触摸滚动距离,滑动加载主要计算container底部和视窗上边缘的距离
事件绑定改成:
mounted(){ ··· this.dom.addEventListener('scroll',this.scroll,false) ··· }, beforeDestroy(){ ··· this.dom.removeEventListener('scroll',this.scroll,false) ··· },
事件回调改为:
/** *滚动钩子 */ scroll(){ constviewHeight=global.innerHeight letparentNode if(this.container!==global){ parentNode=this.$el }else{ parentNode=this.$el.parentNode } if(parentNode){ //获取Vue实例使用的根DOM元素相对于视口的位置 constrect=parentNode.getBoundingClientRect() //this.distance离底部多少距离开始加载 //如果此元素底边距离视口顶部的距离小于视口高度加上distance之和,就加载下一页 if((rect.bottom<=viewHeight+this.distance)&&this.loadable&&!this.loading){ this.load() } } },
源码如下: