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