Parcourir la source

Merge branch 'dev4.5' of http://192.168.3.207:8080/qmx/jy into dev4.5

TANGSHIZHE il y a 4 ans
Parent
commit
4199e96052
1 fichiers modifiés avec 296 ajouts et 294 suppressions
  1. 296 294
      src/web/staticres/js/dropload.js

+ 296 - 294
src/web/staticres/js/dropload.js

@@ -5,332 +5,334 @@
  */
 
 ;(function($){
-    'use strict';
-    var win = window;
-    var doc = document;
-    var $win = $(win);
-    var $doc = $(doc);
-    $.fn.dropload = function(options){
-		if(options.scrollArea == window.top){
-			win = window.top;
-			$win = $(win);
-			doc = window.top.document;
-		    $doc = $(doc);
-		}
-        return new MyDropLoad(this, options);
-    };
-    var MyDropLoad = function(element, options){
-        var me = this;
-        me.$element = element;
-        // 上方是否插入DOM
-        me.upInsertDOM = false;
-        // loading状态
-        me.loading = false;
-        // 是否锁定
-        me.isLockUp = false;
-        me.isLockDown = false;
-        // 是否有数据
-        me.isData = true;
-        me._scrollTop = 0;
-        me._threshold = 0;
-		//默认加载下方
-		me.direction = 'up';
-        me.init(options);
-    };
+  'use strict';
+  var win = window;
+  var doc = document;
+  var $win = $(win);
+  var $doc = $(doc);
+  $.fn.dropload = function(options){
+    if(options.scrollArea == window.top){
+      win = window.top;
+      $win = $(win);
+      doc = window.top.document;
+      $doc = $(doc);
+    }
+    return new MyDropLoad(this, options);
+  };
+  var MyDropLoad = function(element, options){
+    var me = this;
+    me.$element = element;
+    // 上方是否插入DOM
+    me.upInsertDOM = false;
+    // loading状态
+    me.loading = false;
+    // 是否锁定
+    me.isLockUp = false;
+    me.isLockDown = false;
+    // 是否有数据
+    me.isData = true;
+    me._scrollTop = 0;
+    me._threshold = 0;
+    //默认加载下方
+    me.direction = 'up';
+    me.init(options);
+  };
 
-    // 初始化
-    MyDropLoad.prototype.init = function(options){
-        var me = this;
-        me.opts = $.extend(true, {}, {
-            scrollArea : me.$element,                                            // 滑动区域
-            domUp : {                                                            // 上方DOM
-                domClass   : 'dropload-up',
-                domRefresh : '<div class="dropload-refresh">↓下拉刷新</div>',
-                domUpdate  : '<div class="dropload-update">↑释放更新</div>',
-                domLoad    : '<div class="dropload-load"><span class="loading"></span>加载中...</div>'
-            },
-            domDown : {                                                          // 下方DOM
-                domClass   : 'dropload-down',
-                domRefresh : '<div class="dropload-refresh">↑上拉加载更多</div>',
-                domLoad    : '<div class="dropload-load"><span class="loading"></span>加载中...</div>',
-                domNoData  : '<div class="dropload-noData">没有更多了</div>'
-            },
-            autoLoad : true,                                                     // 自动加载
-            distance : 50,                                                       // 拉动距离
-            threshold : '',                                                      // 提前加载距离
-            loadUpFn : '',                                                       // 上方function
-            loadDownFn : ''                                                      // 下方function
-        }, options);
-		//先移除
-		me.$element.find('.'+me.opts.domUp.domClass).remove();
-		me.$element.find('.'+me.opts.domDown.domClass).remove();
-        // 如果加载下方,事先在下方插入DOM
-        if(me.opts.loadDownFn != ''){
-            me.$element.append('<div class="'+me.opts.domDown.domClass+'">'+me.opts.domDown.domRefresh+'</div>');
-            me.$domDown = $('.'+me.opts.domDown.domClass);
-        }
+  // 初始化
+  MyDropLoad.prototype.init = function(options){
+    var me = this;
+    me.opts = $.extend(true, {}, {
+      scrollArea : me.$element,                                            // 滑动区域
+      domUp : {                                                            // 上方DOM
+        domClass   : 'dropload-up',
+        domRefresh : '<div class="dropload-refresh">↓下拉刷新</div>',
+        domUpdate  : '<div class="dropload-update">↑释放更新</div>',
+        domLoad    : '<div class="dropload-load"><span class="loading"></span>加载中...</div>'
+      },
+      domDown : {                                                          // 下方DOM
+        domClass   : 'dropload-down',
+        domRefresh : '<div class="dropload-refresh">↑上拉加载更多</div>',
+        domLoad    : '<div class="dropload-load"><span class="loading"></span>加载中...</div>',
+        domNoData  : '<div class="dropload-noData">没有更多了</div>'
+      },
+      autoLoad : true,                                                     // 自动加载
+      distance : 50,                                                       // 拉动距离
+      threshold : '',                                                      // 提前加载距离
+      loadUpFn : '',                                                       // 上方function
+      loadDownFn : ''                                                      // 下方function
+    }, options);
+    //先移除
+    me.$element.find('.'+me.opts.domUp.domClass).remove();
+    me.$element.find('.'+me.opts.domDown.domClass).remove();
+    // 如果加载下方,事先在下方插入DOM
+    if(me.opts.loadDownFn != ''){
+      me.$element.append('<div class="'+me.opts.domDown.domClass+'">'+me.opts.domDown.domRefresh+'</div>');
+      me.$domDown = $('.'+me.opts.domDown.domClass);
+    }
 
-        // 计算提前加载距离
-        if(!!me.$domDown && me.opts.threshold === ''){
-            // 默认滑到加载区2/3处时加载
-            me._threshold = Math.floor(me.$domDown.height()*1/3);
-        }else{
-            me._threshold = me.opts.threshold;
-        }
+    // 计算提前加载距离
+    if(!!me.$domDown && me.opts.threshold === ''){
+      // 默认滑到加载区2/3处时加载
+      me._threshold = Math.floor(me.$domDown.height()*1/3);
+    }else{
+      me._threshold = me.opts.threshold;
+    }
 
-        // 判断滚动区域
+    // 判断滚动区域
+    if(me.opts.scrollArea == win){
+      me.$scrollArea = $win;
+      // 获取文档高度
+      me._scrollContentHeight = $doc.height();
+      // 获取win显示区高度  —— 这里有坑
+      me._scrollWindowHeight = doc.body.clientHeight;
+      //alert(me._scrollContentHeight+"---"+me._scrollWindowHeight)
+    }else{
+      me.$scrollArea = me.opts.scrollArea;
+      me._scrollContentHeight = me.$element[0].scrollHeight;
+      me._scrollWindowHeight = doc.body.clientHeight;
+    }
+    fnAutoLoad(me);
+
+    // 窗口调整
+    $win.off('resize').on('resize',function(){
+      //移动端数据导出改 --> 软键盘弹起改变窗口高度问题
+      return;
+      if(win != window){
+        return;
+      }
+      clearTimeout(me.timer);
+      me.timer = setTimeout(function(){
         if(me.opts.scrollArea == win){
-            me.$scrollArea = $win;
-            // 获取文档高度
-            me._scrollContentHeight = $doc.height();
-            // 获取win显示区高度  —— 这里有坑
-            me._scrollWindowHeight = doc.body.clientHeight;
-			//alert(me._scrollContentHeight+"---"+me._scrollWindowHeight)
+          // 重新获取win显示区高度
+          me._scrollWindowHeight = win.innerHeight;
         }else{
-            me.$scrollArea = me.opts.scrollArea;
-            me._scrollContentHeight = me.$element[0].scrollHeight;
-            me._scrollWindowHeight = me.$element.height();
+          me._scrollWindowHeight = me.$element.height();
         }
         fnAutoLoad(me);
+      },150);
 
-        // 窗口调整
-        $win.off('resize').on('resize',function(){
-			if(win != window){
-				return;
-			}
-            clearTimeout(me.timer);
-            me.timer = setTimeout(function(){
-                if(me.opts.scrollArea == win){
-                // 重新获取win显示区高度
-                me._scrollWindowHeight = win.innerHeight;
-                }else{
-                    me._scrollWindowHeight = me.$element.height();
-                }
-                fnAutoLoad(me);
-            },150);
-            
-        });
-
-        // 绑定触摸
-        me.$element.off('touchstart').on('touchstart',function(e){
-            if(!me.loading){
-                fnTouches(e);
-                fnTouchstart(e, me);
-            }
-        });
-        me.$element.off('touchmove').on('touchmove',function(e){
-            if(!me.loading){
-                fnTouches(e, me);
-                fnTouchmove(e, me);
-            }
-        });
-        me.$element.off('touchend').on('touchend',function(){
-            if(!me.loading){
-                fnTouchend(me);
-            }
-        });
+    });
 
-        // 加载下方
-        me.$scrollArea.off('scroll').on('scroll',function(){
-			if(typeof(window.top.scrollTop) != "undefined"){
-				window.top.scrollTop = $(this).scrollTop();
-			}
-            me._scrollTop = me.$scrollArea.scrollTop();
+    // 绑定触摸
+    me.$element.off('touchstart').on('touchstart',function(e){
+      if(!me.loading){
+        fnTouches(e);
+        fnTouchstart(e, me);
+      }
+    });
+    me.$element.off('touchmove').on('touchmove',function(e){
+      if(!me.loading){
+        fnTouches(e, me);
+        fnTouchmove(e, me);
+      }
+    });
+    me.$element.off('touchend').on('touchend',function(){
+      if(!me.loading){
+        fnTouchend(me);
+      }
+    });
 
-            // 滚动页面触发加载数据
-			//console.log(me._scrollContentHeight +"--"+ me._threshold+"--"+me._scrollWindowHeight +"--"+ me._scrollTop)
-            if(me.opts.loadDownFn != '' && !me.loading && !me.isLockDown && (me._scrollContentHeight - me._threshold) <= (me._scrollWindowHeight + me._scrollTop)){
-                loadDown(me);
-            }
-        });
-    };
+    // 加载下方
+    me.$scrollArea.off('scroll').on('scroll',function(){
+      if(typeof(window.top.scrollTop) != "undefined"){
+        window.top.scrollTop = $(this).scrollTop();
+      }
+      me._scrollTop = me.$scrollArea.scrollTop();
 
-    // touches
-    function fnTouches(e){
-        if(!e.touches){
-            e.touches = e.originalEvent.touches;
-        }
-    }
+      // 滚动页面触发加载数据
+      //console.info(me._scrollContentHeight +"--"+ me._threshold+"--"+me._scrollWindowHeight +"--"+ me._scrollTop)
+      if(me.opts.loadDownFn != '' && !me.loading && !me.isLockDown && (me._scrollContentHeight - me._threshold) <= (me._scrollWindowHeight + me._scrollTop)){
+        loadDown(me);
+      }
+    });
+  };
 
-    // touchstart
-    function fnTouchstart(e, me){
-        me._startY = e.touches[0].pageY;
-        // 记住触摸时的scrolltop值
-        me.touchScrollTop = me.$scrollArea.scrollTop();
+  // touches
+  function fnTouches(e){
+    if(!e.touches){
+      e.touches = e.originalEvent.touches;
     }
+  }
 
-    // touchmove
-    function fnTouchmove(e, me){
-        me._curY = e.touches[0].pageY;
-        me._moveY = me._curY - me._startY;
+  // touchstart
+  function fnTouchstart(e, me){
+    me._startY = e.touches[0].pageY;
+    // 记住触摸时的scrolltop值
+    me.touchScrollTop = me.$scrollArea.scrollTop();
+  }
 
-        if(me._moveY > 0){
-            me.direction = 'down';
-        }else if(me._moveY < 0){
-            me.direction = 'up';
-        }
+  // touchmove
+  function fnTouchmove(e, me){
+    me._curY = e.touches[0].pageY;
+    me._moveY = me._curY - me._startY;
 
-        var _absMoveY = Math.abs(me._moveY);
+    if(me._moveY > 0){
+      me.direction = 'down';
+    }else if(me._moveY < 0){
+      me.direction = 'up';
+    }
 
-        // 加载上方
-        if(me.opts.loadUpFn != '' && me.touchScrollTop <= 0 && me.direction == 'down' && !me.isLockUp){
-            e.preventDefault();
+    var _absMoveY = Math.abs(me._moveY);
 
-            me.$domUp = $('.'+me.opts.domUp.domClass);
-            // 如果加载区没有DOM
-            if(!me.upInsertDOM){
-                me.$element.prepend('<div class="'+me.opts.domUp.domClass+'"></div>');
-                me.upInsertDOM = true;
-            }
-            
-            fnTransition(me.$domUp,0);
+    // 加载上方
+    if(me.opts.loadUpFn != '' && me.touchScrollTop <= 0 && me.direction == 'down' && !me.isLockUp){
+      e.preventDefault();
 
-            // 下拉
-            if(_absMoveY <= me.opts.distance){
-                me._offsetY = _absMoveY;
-                // todo:move时会不断清空、增加dom,有可能影响性能,下同
-                me.$domUp.html(me.opts.domUp.domRefresh);
-            // 指定距离 < 下拉距离 < 指定距离*2
-            }else if(_absMoveY > me.opts.distance && _absMoveY <= me.opts.distance*2){
-                me._offsetY = me.opts.distance+(_absMoveY-me.opts.distance)*0.5;
-                me.$domUp.html(me.opts.domUp.domUpdate);
-            // 下拉距离 > 指定距离*2
-            }else{
-                me._offsetY = me.opts.distance+me.opts.distance*0.5+(_absMoveY-me.opts.distance*2)*0.2;
-            }
+      me.$domUp = $('.'+me.opts.domUp.domClass);
+      // 如果加载区没有DOM
+      if(!me.upInsertDOM){
+        me.$element.prepend('<div class="'+me.opts.domUp.domClass+'"></div>');
+        me.upInsertDOM = true;
+      }
 
-            me.$domUp.css({'height': me._offsetY});
-        }
-    }
+      fnTransition(me.$domUp,0);
 
-    // touchend
-    function fnTouchend(me){
-        var _absMoveY = Math.abs(me._moveY);
-        if(me.opts.loadUpFn != '' && me.touchScrollTop <= 0 && me.direction == 'down' && !me.isLockUp){
-            fnTransition(me.$domUp,300);
+      // 下拉
+      if(_absMoveY <= me.opts.distance){
+        me._offsetY = _absMoveY;
+        // todo:move时会不断清空、增加dom,有可能影响性能,下同
+        me.$domUp.html(me.opts.domUp.domRefresh);
+        // 指定距离 < 下拉距离 < 指定距离*2
+      }else if(_absMoveY > me.opts.distance && _absMoveY <= me.opts.distance*2){
+        me._offsetY = me.opts.distance+(_absMoveY-me.opts.distance)*0.5;
+        me.$domUp.html(me.opts.domUp.domUpdate);
+        // 下拉距离 > 指定距离*2
+      }else{
+        me._offsetY = me.opts.distance+me.opts.distance*0.5+(_absMoveY-me.opts.distance*2)*0.2;
+      }
 
-            if(_absMoveY > me.opts.distance){
-                me.$domUp.css({'height':me.$domUp.children().height()});
-                me.$domUp.html(me.opts.domUp.domLoad);
-                me.loading = true;
-                me.opts.loadUpFn(me);
-            }else{
-                me.$domUp.css({'height':'0'}).on('webkitTransitionEnd mozTransitionEnd transitionend',function(){
-                    me.upInsertDOM = false;
-                    $(this).remove();
-                });
-            }
-            me._moveY = 0;
-        }
+      me.$domUp.css({'height': me._offsetY});
     }
+  }
 
-    // 如果文档高度不大于窗口高度,数据较少,自动加载下方数据
-    function fnAutoLoad(me){
-        if(me.opts.loadDownFn != '' && me.opts.autoLoad){
-			//alert(me._scrollContentHeight +"----"+  me._threshold+"----"+ me._scrollWindowHeight)
-            if((me._scrollContentHeight - me._threshold) <= me._scrollWindowHeight){
-                loadDown(me);
-            }
-        }
+  // touchend
+  function fnTouchend(me){
+    var _absMoveY = Math.abs(me._moveY);
+    if(me.opts.loadUpFn != '' && me.touchScrollTop <= 0 && me.direction == 'down' && !me.isLockUp){
+      fnTransition(me.$domUp,300);
+
+      if(_absMoveY > me.opts.distance){
+        me.$domUp.css({'height':me.$domUp.children().height()});
+        me.$domUp.html(me.opts.domUp.domLoad);
+        me.loading = true;
+        me.opts.loadUpFn(me);
+      }else{
+        me.$domUp.css({'height':'0'}).on('webkitTransitionEnd mozTransitionEnd transitionend',function(){
+          me.upInsertDOM = false;
+          $(this).remove();
+        });
+      }
+      me._moveY = 0;
     }
+  }
 
-    // 重新获取文档高度
-    function fnRecoverContentHeight(me){
-        if(me.opts.scrollArea == win){
-            me._scrollContentHeight = $doc.height();
-			//alert(me._scrollContentHeight +"----"+  me._threshold+"----"+ me._scrollWindowHeight)
-        }else{
-            me._scrollContentHeight = me.$element[0].scrollHeight;
-        }
+  // 如果文档高度不大于窗口高度,数据较少,自动加载下方数据
+  function fnAutoLoad(me){
+    if(me.opts.loadDownFn != '' && me.opts.autoLoad){
+      //alert(me._scrollContentHeight +"----"+  me._threshold+"----"+ me._scrollWindowHeight)
+      if((me._scrollContentHeight - me._threshold) <= me._scrollWindowHeight){
+        loadDown(me);
+      }
     }
+  }
 
-    // 加载下方
-    function loadDown(me){
-        me.direction = 'up';
-        me.$domDown.html(me.opts.domDown.domLoad);
-        me.loading = true;
-        me.opts.loadDownFn(me);
+  // 重新获取文档高度
+  function fnRecoverContentHeight(me){
+    if(me.opts.scrollArea == win){
+      me._scrollContentHeight = $doc.height();
+      //alert(me._scrollContentHeight +"----"+  me._threshold+"----"+ me._scrollWindowHeight)
+    }else{
+      me._scrollContentHeight = me.$element[0].scrollHeight;
     }
+  }
 
-    // 锁定
-    MyDropLoad.prototype.lock = function(direction){
-        var me = this;
-        // 如果不指定方向
-        if(direction === undefined){
-            // 如果操作方向向上
-            if(me.direction == 'up'){
-                me.isLockDown = true;
-            // 如果操作方向向下
-            }else if(me.direction == 'down'){
-                me.isLockUp = true;
-            }else{
-                me.isLockUp = true;
-                me.isLockDown = true;
-            }
-        // 如果指定锁上方
-        }else if(direction == 'up'){
-            me.isLockUp = true;
-        // 如果指定锁下方
-        }else if(direction == 'down'){
-            me.isLockDown = true;
-            // 为了解决DEMO5中tab效果bug,因为滑动到下面,再滑上去点tab,direction=down,所以有bug
-            me.direction = 'up';
-        }
-    };
+  // 加载下方
+  function loadDown(me){
+    me.direction = 'up';
+    me.$domDown.html(me.opts.domDown.domLoad);
+    me.loading = true;
+    me.opts.loadDownFn(me);
+  }
 
-    // 解锁
-    MyDropLoad.prototype.unlock = function(){
-        var me = this;
-        // 简单粗暴解锁
-        me.isLockUp = false;
-        me.isLockDown = false;
-        // 为了解决DEMO5中tab效果bug,因为滑动到下面,再滑上去点tab,direction=down,所以有bug
-        me.direction = 'up';
-    };
+  // 锁定
+  MyDropLoad.prototype.lock = function(direction){
+    var me = this;
+    // 如果不指定方向
+    if(direction === undefined){
+      // 如果操作方向向上
+      if(me.direction == 'up'){
+        me.isLockDown = true;
+        // 如果操作方向向下
+      }else if(me.direction == 'down'){
+        me.isLockUp = true;
+      }else{
+        me.isLockUp = true;
+        me.isLockDown = true;
+      }
+      // 如果指定锁上方
+    }else if(direction == 'up'){
+      me.isLockUp = true;
+      // 如果指定锁下方
+    }else if(direction == 'down'){
+      me.isLockDown = true;
+      // 为了解决DEMO5中tab效果bug,因为滑动到下面,再滑上去点tab,direction=down,所以有bug
+      me.direction = 'up';
+    }
+  };
 
-    // 无数据
-    MyDropLoad.prototype.noData = function(flag){
-        var me = this;
-        if(flag === undefined || flag == true){
-            me.isData = false;
-        }else if(flag == false){
-            me.isData = true;
-        }
-    };
+  // 解锁
+  MyDropLoad.prototype.unlock = function(){
+    var me = this;
+    // 简单粗暴解锁
+    me.isLockUp = false;
+    me.isLockDown = false;
+    // 为了解决DEMO5中tab效果bug,因为滑动到下面,再滑上去点tab,direction=down,所以有bug
+    me.direction = 'up';
+  };
 
-    // 重置
-    MyDropLoad.prototype.resetload = function(){
-        var me = this;
-		if(!me.upInsertDOM){
-			me.direction = 'up';
-		}
-        if(me.direction == 'down' && me.upInsertDOM){
-            me.$domUp.css({'height':'0'}).on('webkitTransitionEnd mozTransitionEnd transitionend',function(){
-                me.loading = false;
-                me.upInsertDOM = false;
-                $(this).remove();
-                fnRecoverContentHeight(me);
-            });
-        }else if(me.direction == 'up'){
-            me.loading = false;
-            // 如果有数据
-            if(me.isData){
-                // 加载区修改样式
-                me.$domDown.html(me.opts.domDown.domRefresh);
-                fnRecoverContentHeight(me);
-                fnAutoLoad(me);
-            }else{
-                // 如果没数据
-                me.$domDown.html(me.opts.domDown.domNoData);
-            }
-        }
-    };
+  // 无数据
+  MyDropLoad.prototype.noData = function(flag){
+    var me = this;
+    if(flag === undefined || flag == true){
+      me.isData = false;
+    }else if(flag == false){
+      me.isData = true;
+    }
+  };
 
-    // css过渡
-    function fnTransition(dom,num){
-        dom.css({
-            '-webkit-transition':'all '+num+'ms',
-            'transition':'all '+num+'ms'
-        });
+  // 重置
+  MyDropLoad.prototype.resetload = function(){
+    var me = this;
+    if(!me.upInsertDOM){
+      me.direction = 'up';
     }
-})(window.Zepto || window.jQuery);
+    if(me.direction == 'down' && me.upInsertDOM){
+      me.$domUp.css({'height':'0'}).on('webkitTransitionEnd mozTransitionEnd transitionend',function(){
+        me.loading = false;
+        me.upInsertDOM = false;
+        $(this).remove();
+        fnRecoverContentHeight(me);
+      });
+    }else if(me.direction == 'up'){
+      me.loading = false;
+      // 如果有数据
+      if(me.isData){
+        // 加载区修改样式
+        me.$domDown.html(me.opts.domDown.domRefresh);
+        fnRecoverContentHeight(me);
+        fnAutoLoad(me);
+      }else{
+        // 如果没数据
+        me.$domDown.html(me.opts.domDown.domNoData);
+      }
+    }
+  };
+
+  // css过渡
+  function fnTransition(dom,num){
+    dom.css({
+      '-webkit-transition':'all '+num+'ms',
+      'transition':'all '+num+'ms'
+    });
+  }
+})(window.Zepto || window.jQuery);