| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | /** * 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;
 |