1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- /**
- * mescroll-body写在子组件时, 需通过mescroll的mixins补充子组件缺少的生命周期
- */
- const MescrollMoreMixin = {
- data() {
- return {
- tabIndex: 0, // 当前tab下标
- mescroll: {
- onPageScroll: e=>{
- this.handlePageScroll(e)
- },
- onReachBottom: ()=>{
- this.handleReachBottom()
- },
- onPullDownRefresh: ()=>{
- this.handlePullDownRefresh()
- }
- }
- }
- },
- // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件
- onPageScroll(e) {
- this.handlePageScroll(e)
- },
- onReachBottom() {
- this.handleReachBottom()
- },
- // 当down的native: true时, 还需传递此方法进到子组件
- onPullDownRefresh(){
- this.handlePullDownRefresh()
- },
- methods:{
- handlePageScroll(e){
- let mescroll = this.getMescroll(this.tabIndex);
- mescroll && mescroll.onPageScroll(e);
- },
- handleReachBottom(){
- let mescroll = this.getMescroll(this.tabIndex);
- mescroll && mescroll.onReachBottom();
- },
- handlePullDownRefresh(){
- let mescroll = this.getMescroll(this.tabIndex);
- mescroll && mescroll.onPullDownRefresh();
- },
- // 根据下标获取对应子组件的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;
|