| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | 
							- // 使用renderjs直接操作window对象,实现动态控制app和h5的bounce
 
- // bounce: iOS橡皮筋,Android半月弧,h5浏览器下拉背景等效果 (下拉刷新时禁止)
 
- // https://uniapp.dcloud.io/frame?id=renderjs
 
- // 与wxs的me实例一致
 
- var me = {}
 
- // 初始化window对象的touch事件 (仅初始化一次)
 
- if(window && !window.$mescrollRenderInit){
 
- 	window.$mescrollRenderInit = true
 
- 	
 
- 	
 
- 	window.addEventListener('touchstart', function(e){
 
- 		if (me.disabled()) return;
 
- 		me.startPoint = me.getPoint(e); // 记录起点
 
- 	}, {passive: true})
 
- 	
 
- 	
 
- 	window.addEventListener('touchmove', function(e){
 
- 		if (me.disabled()) return;
 
- 		if (me.getScrollTop() > 0) return; // 需在顶部下拉,才禁止bounce
 
- 		
 
- 		var curPoint = me.getPoint(e); // 当前点
 
- 		var moveY = curPoint.y - me.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉
 
- 		// 向下拉
 
- 		if (moveY > 0) {
 
- 			// 可下拉的条件
 
- 			if (!me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || (me.isUpScrolling && me.isUpBoth))) {
 
- 				
 
- 				// 只有touch在mescroll的view上面,才禁止bounce
 
- 				var el = e.target;
 
- 				var isMescrollTouch = false;
 
- 				while (el && el.tagName && el.tagName !== 'UNI-PAGE-BODY' && el.tagName != "BODY") {
 
- 					var cls = el.classList;
 
- 					if (cls && cls.contains('mescroll-render-touch')) {
 
- 						isMescrollTouch = true
 
- 						break;
 
- 					}
 
- 					el = el.parentNode; // 继续检查其父元素
 
- 				}
 
- 				// 禁止bounce (不会对swiper和iOS侧滑返回造成影响)
 
- 				if (isMescrollTouch && e.cancelable && !e.defaultPrevented) e.preventDefault();
 
- 			}
 
- 		}
 
- 	}, {passive: false})
 
- }
 
- /* 获取滚动条的位置 */
 
- me.getScrollTop = function() {
 
- 	return me.scrollTop || 0
 
- }
 
- /* 是否禁用下拉刷新 */
 
- me.disabled = function(){
 
- 	return !me.optDown || !me.optDown.use || me.optDown.native
 
- }
 
- /* 根据点击滑动事件获取第一个手指的坐标 */
 
- me.getPoint = function(e) {
 
- 	if (!e) {
 
- 		return {x: 0,y: 0}
 
- 	}
 
- 	if (e.touches && e.touches[0]) {
 
- 		return {x: e.touches[0].pageX,y: e.touches[0].pageY}
 
- 	} else if (e.changedTouches && e.changedTouches[0]) {
 
- 		return {x: e.changedTouches[0].pageX,y: e.changedTouches[0].pageY}
 
- 	} else {
 
- 		return {x: e.clientX,y: e.clientY}
 
- 	}
 
- }
 
- /**
 
-  * 监听逻辑层数据的变化 (实时更新数据)
 
-  */
 
- function propObserver(wxsProp) {
 
- 	me.optDown = wxsProp.optDown
 
- 	me.scrollTop = wxsProp.scrollTop
 
- 	me.isDownScrolling = wxsProp.isDownScrolling
 
- 	me.isUpScrolling = wxsProp.isUpScrolling
 
- 	me.isUpBoth = wxsProp.isUpBoth
 
- }
 
- /* 导出模块 */
 
- const renderBiz = {
 
- 	data() {
 
- 		return {
 
- 			propObserver: propObserver,
 
- 		}
 
- 	}
 
- }
 
- export default renderBiz;
 
 
  |