zoukankan      html  css  js  c++  java
  • 手机端 : js设置table内容 加载更多,并头部锁定悬浮


     <script src="js/jquery.min.js" type="text/javascript"></script>
    <!--上划加载更多 tr--> <script src="js/dropload.js" type="text/javascript"></script> <script src="js/khData.js" type="text/javascript"></script>
    /**
     * dropload
     * 西门(http://ons.me/526.html)
     * 0.9.0(160215)
     */
    
    ;(function($){
        'use strict';
        var win = window;
        var doc = document;
        var $win = $(win);
        var $doc = $(doc);
        $.fn.dropload = function(options){
            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.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);
    
            // 如果加载下方,事先在下方插入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.opts.scrollArea == win){
                me.$scrollArea = $win;
                // 获取文档高度
                me._scrollContentHeight = $doc.height();
                // 获取win显示区高度  —— 这里有坑
                me._scrollWindowHeight = doc.documentElement.clientHeight;
            }else{
                me.$scrollArea = me.opts.scrollArea;
                me._scrollContentHeight = me.$element[0].scrollHeight;
                me._scrollWindowHeight = me.$element.height();
            }
            fnAutoLoad(me);
    
            // 窗口调整
            $win.on('resize',function(){
                if(me.opts.scrollArea == win){
                    // 重新获取win显示区高度
                    me._scrollWindowHeight = win.innerHeight;
                }else{
                    me._scrollWindowHeight = me.$element.height();
                }
            });
    
            // 绑定触摸
            me.$element.on('touchstart',function(e){
                if(!me.loading){
                    fnTouches(e);
                    fnTouchstart(e, me);
                }
            });
            me.$element.on('touchmove',function(e){
                if(!me.loading){
                    fnTouches(e, me);
                    fnTouchmove(e, me);
                }
            });
            me.$element.on('touchend',function(){
                if(!me.loading){
                    fnTouchend(me);
                }
            });
    
            // 加载下方
            me.$scrollArea.on('scroll',function(){
                me._scrollTop = me.$scrollArea.scrollTop();
    
                // 滚动页面触发加载数据
                if(me.opts.loadDownFn != '' && !me.loading && !me.isLockDown && (me._scrollContentHeight - me._threshold) <= (me._scrollWindowHeight + me._scrollTop)){
                    loadDown(me);
                }
            });
        };
    
        // touches
        function fnTouches(e){
            if(!e.touches){
                e.touches = e.originalEvent.touches;
            }
        }
    
        // touchstart
        function fnTouchstart(e, me){
            me._startY = e.touches[0].pageY;
            // 记住触摸时的scrolltop值
            me.touchScrollTop = me.$scrollArea.scrollTop();
        }
    
        // touchmove
        function fnTouchmove(e, me){
            me._curY = e.touches[0].pageY;
            me._moveY = me._curY - me._startY;
    
            if(me._moveY > 0){
                me.direction = 'down';
            }else if(me._moveY < 0){
                me.direction = 'up';
            }
    
            var _absMoveY = Math.abs(me._moveY);
    
            // 加载上方
            if(me.opts.loadUpFn != '' && me.touchScrollTop <= 0 && me.direction == 'down' && !me.isLockUp){
                e.preventDefault();
    
                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(_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.css({'height': me._offsetY});
            }
        }
    
        // 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 fnAutoLoad(me){
            if(me.opts.autoLoad){
                if((me._scrollContentHeight - me._threshold) <= me._scrollWindowHeight){
                    loadDown(me);
                }
            }
        }
    
        // 重新获取文档高度
        function fnRecoverContentHeight(me){
            if(me.opts.scrollArea == win){
                me._scrollContentHeight = $doc.height();
            }else{
                me._scrollContentHeight = me.$element[0].scrollHeight;
            }
        }
    
        // 加载下方
        function loadDown(me){
            me.direction = 'up';
            me.$domDown.html(me.opts.domDown.domLoad);
            me.loading = true;
            me.opts.loadDownFn(me);
        }
    
        // 锁定
        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.unlock = function(){
            var me = this;
            // 简单粗暴解锁
            me.isLockUp = false;
            me.isLockDown = false;
            // 为了解决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.resetload = function(){
            var me = this;
            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);
    dropload.js
    $(function () {
    
        var itemIndex = 0;
    
        var tabLoadEndArray = [false, false, false];
        var tabLenghtArray = [28, 15, 47];
        var tabScroolTopArray = [0, 0, 0];
        
        // dropload
        var dropload = $('.tablemess').dropload({
            scrollArea: window,
            domDown: {
                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>'
            },
            loadDownFn: function (me) {
                setTimeout(function () {
                    if (tabLoadEndArray[itemIndex]) {
                        me.resetload();
                        me.lock();
                        me.noData();
                        me.resetload();
                        return;
                    }
                    var result = '';
                    for (var index = 0; index < 10; index++) {
                        if (tabLenghtArray[itemIndex] > 0) {
                            tabLenghtArray[itemIndex]--;
                        } else {
                            tabLoadEndArray[itemIndex] = true;
                            break;
                        }
                        if (itemIndex == 0) {
                            result
                            += ''
                            + '    <tr>'
                            + '      <td>12:08:08</td>'
                            + '      <td>62</td>'
                            + '      <td>35</td>'
                            + '      <td>156</td>'
                            + '    </tr>';
                        } 
                    }
                    $('.table-bordered tbody').eq(itemIndex).append(result);
                    me.resetload();
                }, 500);
            }
        });
    
    
    });
    khData.js

      



    <div class="padding10 overflowauto tablemess" style="padding-bottom: 50px;"> <table class="table-bordered" id="fixedtable" > //table头部悬浮锁定 <thead style="display: none;position: fixed;top: 106px;"> //隐藏thead 设置好 距离顶部的位置 <th id="fixed-thdata1">时间</th>//设置 每个th的id <th id="fixed-thdata2">车速(km/h)</th> <th id="fixed-thdata3">排放温度(°C)</th> <th id="fixed-thdata4">NOx浓度(ppm)</th> </thead> </table> <table class="table-bordered" > <thead > <th id="thdata1">时间</th> <th id="thdata2">车速(km/h)</th> <th id="thdata3">排放温度(°C)</th> <th id="thdata4">NOx浓度(ppm)</th> </thead> <tbody id="data_tbody"> //加载更多 设置id <tr> <td>09:42:21</td> <td>30</td> <td>20</td> <td>390</td> </tr> <tr> <td>09:42:21</td> <td>30</td> <td>20</td> <td>390</td> </tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> <tr><td>09:42:21</td><td>30</td> <td>20</td><td>390</td></tr> </tbody> </table> </div>

      

    <script>
        $(function(){
            var $thdata1=$('#thdata1').width()+1;
            var $thdata2=$('#thdata2').width()+1;
            var $thdata3=$('#thdata3').width()+1;
            var $thdata4=$('#thdata4').width()+1;   //获取原始table的头部的th的width
            $(window).scroll(function () {  //当触发屏幕滚动时执行方法
          if ($('#data_tbody').length > 0) {  
            var thbody = $('#data_tbody').prev();//获取tbody的前一个同胞元素 即thead
            var thOffset = thbody.offset(); //获取 thead的偏移位置
            var scTop = $(window).scrollTop()+thOffset.top; //滚动条相对top的位置
    //        console.log(thOffset);
    //        console.log(scTop);
            if (scTop > thOffset.top) {  //滚动条滚到thead及以下的位置,用临时的thead代替显示
            $('#fixedtable thead').css('display', 'block');
            $('#fixed-thdata1').css('width',$thdata1);   
            $('#fixed-thdata2').css('width',$thdata2);
            $('#fixed-thdata3').css('width',$thdata3);
            $('#fixed-thdata4').css('width',$thdata4);//新代替的thead 的获取width
              $('#fixedtable').offset({ top: scTop, left: thOffset.left });
            }
            else { //滚动条滚到thead上的位置,用table的原始thead显示
              $('#fixedtable thead').css('display', 'none');
            }
          }
        });
        })
    
    
    </script>

  • 相关阅读:
    php之异常处理
    php7之严格模式RFC
    获取真实ip三个方法
    php网站速度性能优化(转)
    PHPweb应用攻击总结(转)
    PHP安全之Web攻击(转)
    php获取真实ip地址(转)
    单表查询
    表与表之间的关系
    表的操作
  • 原文地址:https://www.cnblogs.com/dazhangli/p/8547904.html
Copyright © 2011-2022 走看看