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.
		
		
		
		
		
			
		
			
				
					
					
						
							69 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							69 lines
						
					
					
						
							1.9 KiB
						
					
					
				| import { ref  } from 'vue'; | |
| 
 | |
| // 小程序无法在hook中使用页面级别生命周期,需单独传入: https://ask.dcloud.net.cn/question/161173 | |
| // import { onPageScroll, onReachBottom, onPullDownRefresh} from '@dcloudio/uni-app'; | |
|  | |
| /** mescroll-more示例写在子组件时,需通过useMescrollMore补充子组件缺少的生命周期, 相当于vue2的mescroll-more.js文件 */  | |
| function useMescrollMore(mescrollItems, onPageScroll, onReachBottom, onPullDownRefresh){ | |
| 	// 当前tab下标 | |
| 	const tabIndex = ref(0)  | |
| 	 | |
| 	// 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件 | |
| 	onPageScroll && onPageScroll(e=>{ | |
| 		handlePageScroll(e) | |
| 	}) | |
| 	 | |
| 	onReachBottom && onReachBottom(()=>{ | |
| 		handleReachBottom() | |
| 	}) | |
| 	 | |
| 	// 当down的native: true时, 还需传递此方法进到子组件 | |
| 	onPullDownRefresh && onPullDownRefresh(()=>{ | |
| 		handlePullDownRefresh() | |
| 	}) | |
| 	 | |
| 	const handlePageScroll = (e)=>{ | |
| 		let mescroll = getMescroll(tabIndex.value); | |
| 		mescroll && mescroll.onPageScroll(e); | |
| 	} | |
| 	const handleReachBottom = ()=>{ | |
| 		let mescroll = getMescroll(tabIndex.value); | |
| 		mescroll && mescroll.onReachBottom(); | |
| 	} | |
| 		 | |
| 	const handlePullDownRefresh = ()=>{ | |
| 		let mescroll = getMescroll(tabIndex.value); | |
| 		mescroll && mescroll.onPullDownRefresh(); | |
| 	} | |
| 	 | |
| 	// 根据下标获取对应子组件的mescroll | |
| 	const getMescroll = (i)=>{ | |
| 		if (mescrollItems && mescrollItems[i]) { | |
| 			return mescrollItems[i].value.getMescroll() | |
| 		} else{ | |
| 			return null | |
| 		} | |
| 	} | |
| 	 | |
| 	// 切换tab,恢复滚动条位置 | |
| 	const scrollToLastY = ()=>{ | |
| 		let mescroll = getMescroll(tabIndex.value); | |
| 		if(mescroll){ | |
| 			// 恢复上次滚动条的位置 | |
| 			let y = mescroll.getScrollTop() | |
| 			mescroll.scrollTo(y, 0) | |
| 			// 再次恢复上次滚动条的位置, 确保元素已渲染 | |
| 			setTimeout(()=>{ | |
| 				mescroll.scrollTo(y, 0) | |
| 			},20) | |
| 		} | |
| 	} | |
| 	 | |
| 	return { | |
| 		tabIndex, | |
| 		getMescroll, | |
| 		scrollToLastY | |
| 	} | |
| } | |
| 
 | |
| export default useMescrollMore |