You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/** * mescroll-body写在子组件时,需通过mescroll的mixins补充子组件缺少的生命周期: * 当一个页面只有一个mescroll-body写在子组件时, 则使用mescroll-comp.js (参考 mescroll-comp 案例) * 当一个页面有多个mescroll-body写在子组件时, 则使用mescroll-more.js (参考 mescroll-more 案例) */ const MescrollMoreMixin = { data() { return { tabIndex: 0 // 当前tab下标
} }, // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件
onPageScroll(e) { let mescroll = this.getMescroll(this.tabIndex); mescroll && mescroll.onPageScroll(e); }, onReachBottom() { let mescroll = this.getMescroll(this.tabIndex); mescroll && mescroll.onReachBottom(); }, // 当down的native: true时, 还需传递此方法进到子组件
onPullDownRefresh(){ let mescroll = this.getMescroll(this.tabIndex); mescroll && mescroll.onPullDownRefresh(); }, methods:{ // 根据下标获取对应子组件的mescroll
getMescroll(i){ if(!this.mescrollItems) this.mescrollItems = []; if(!this.mescrollItems[i]) { // v-for中的refs
let vForItem = this.$refs["mescrollItem"]; if(vForItem){ this.mescrollItems[i] = vForItem[i] }else{ // 普通的refs,不可重复
this.mescrollItems[i] = this.$refs["mescrollItem"+i]; } } let item = this.mescrollItems[i] return item ? item.mescroll : null }, // 切换tab,恢复滚动条位置
tabChange(i){ let mescroll = this.getMescroll(i); if(mescroll){ // 延时(比$nextTick靠谱一些),确保元素已渲染
setTimeout(()=>{ mescroll.scrollTo(mescroll.getScrollTop(),0) },30) } } } }
export default MescrollMoreMixin;
|