| // 使用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; |