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;
|