• tab切换中的滚动条下拉分页带来的问题


    相信做过tab切换中滚动条下拉分页的童鞋都知道,我们在用scroll方法来做滚动条下拉分页的时候,都是有bug,切换中间的内容会互相影响,为了解决这个问题,我总结了2种方法;

    1.方法一:

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
            <input type="hidden" id="y_gspage" value=""/>
            <input type="hidden" id="y_nrpage" value=""/>
            <input type="hidden" id="y_gzpage" value=""/>
            <input type="hidden" id="y_pageCount" value=""/>
            <input type="hidden" id="csctime" value="">
        <ul class="changeTitle">
            <li class="gsyc">高手收益榜</li><li class="nrsy">牛人收益榜</li><li class="gznr">关注牛股</li>
        </ul>
        <div class="wrap">
            <div class="rankCon" id="bang01"></div>
            <div class="rankCon" id="bang02"></div>
            <div class="rankCon" id="bang03"></div>
        </div>
    </body>
    <script src="http://ossweb-img.qq.com/images/js/jquery/jquery-1.7.2.min.js"></script>
    <script type="text/javascript" src="tabfun.js"></script>
    <script type="text/javascript">
        //tabq切换
        $('.changeTitle li').click(function(){
            var _index=$(this).index();
            $(this).addClass('on').siblings().removeClass('on');
            $('.rankCon').eq(_index).show().siblings('.rankCon').hide();
        });
    
        $(window).scroll(function () {
             //滚动条距离顶部距离
            var scrolltotop=parseFloat($(window).scrollTop());
            //窗口高度
            var winheight = parseFloat($(window).height());
            //内容总高度
            var conheight = parseFloat($(document).height())-200*1;
            //总高度
            var totalheight = scrolltotop + winheight;
            //判断是否加载,当操作高度比内容大,空间充裕->加载
            var nowTime = new Date().getTime();
            var clickTime = $("#csctime").val();
    
            if( clickTime != 'undefined' && (nowTime - clickTime < 1500)){
                //alert('操作过于频繁,稍后再试');
                console.log(222);
            }else if(clickTime == 'undefined' || clickTime == ''){
                $("#csctime").val(nowTime);
            }else{
                console.log(111);
                $("#csctime").val(nowTime);
                if(totalheight >= conheight ){
                    cscHuaDonglModel().upAjax();
                }
            }
        });
    
        //手势上滑 分页特效
        var cscHuaDonglModel = function(){
            return {
                // 上拉滑动事件  加载新的分页内容
                upAjax:function(){
                   var type = $("#y_ggtype").val(); //随便给的一个变量值为了区分到底是高手收益榜、牛人收益榜、还是关注牛人股;
                   if(type == 'heightrank'){    //如果是高手收益榜
                        var page = $("#y_gspage").val();   //把此时的高手收益榜的value值赋给page;
                    }
                    if(type == 'profitsrank'){   //如果是高手收益榜
                        var page = $("#y_nrpage").val();   //把此时的牛人收益榜的value值赋给page;
                    }
                    if(type == 'followrank'){   //如果是关注牛人股
                        var page = $("#y_gzpage").val();   //把此时的关注牛人股的value值赋给page;
                    }
                   var pageCount = $("#y_pageCount").val();   //总条数
    
                   if(pageCount <= page*10){   //每页10条数据
                        //没有新数据了
                        //alert('sss');
                   }else{
                        if(page>=1){    //如果页数大于1;
                            page = page-1+1+1;  //页数++
                            if(type == 'heightrank'){      //如果是高手收益榜
                                getHeiGuess().init(page);    //调用高手收益榜异步请求方法
                            }
                            if(type == 'profitsrank'){
                                getProfitsRank().init(page);
                            }
                            if(type == 'followrank'){
                                getFollowStock().init(page);
                            }
                        }
                   }
                },
                // 下拉刷新事件  刷新当前页面
                downAjax:function(){
    
                },
            }
        }
        getHeiGuess().init(1); //默认显示高手收益榜的数据
    </script>
    </html>
    /*高手收益榜*/
    var getHeiGuess = function(){
        return {
            init: function(page){
                $.ajax({
                    url:urlHost+"stock/getHeigherGuess?sn="+randsn,
                    dataType: "jsonp",
                    data: {"page":page,"pageSize":5},
                    success: function(data){
                        if(data.Status && data.Data){
                            $("#y_ggtype").val('heightrank');   //重点在这里,把y_ggtype的值设置为heightrank,到时候点击具体模块的时候调用这个方法,获取到的y_ggtype的val值都是变化的。下面的同理
                            $("#y_gspage").val(page);
                            $("#y_pageCount").val(data.Data.count);
                            var str;
                            for(){
                                str+='';
                            }
                            $("#bang01").html(str);
                        }
                    })
                });
            }
        }
    }
    
    /*牛人收益榜*/
    var getProfitsRank = function(){
        return {
            init: function(page){
                $.ajax({
                    url:urlHost+"stock/getResult?sn="+randsn,
                    dataType: "jsonp",
                    data: {"page":page,"pageSize":5},
                    success: function(data){
                        if(data.Status && data.Data){
                            $("#y_ggtype").val('profitsrank');
                            $("#y_nrpage").val(page);
                            $("#y_pageCount").val(data.Data.count);
                            var str;
                            for(){
                                str+='';
                            }
                            $("#bang02").html(str);
                        }
                    })
                });
            }
        }
    }
    
    /*关注牛股*/
    var getFollowStock = function(){
        return {
            init: function(page){
                $.ajax({
                    url:urlHost+"stock/getFollowStock?sn="+randsn,
                    dataType: "jsonp",
                    data: {"page":page,"pageSize":5},
                    success: function(data){
                        if(data.Status && data.Data){
                            $("#y_ggtype").val('followrank');
                            $("#y_gzpage").val(page);
                            $("#y_pageCount").val(data.Data.count);
                            var str;
                            for(){
                                str+='';
                            }
                            $("#bang03").html(str);
                        }
                    })
                });
            }
        }
    }

        

    $(".gsyc").click(function(){
    getHeiGuess().init(1);
    });
    /*牛人收益榜*/
    $(".nrsy").click(function(){
    getProfitsRank().init(1);
    });
    /*关注牛人股*/
    $(".gznr").click(function(){
    getFollowStock().init(1);
    });

     

    2.方法二:

    具体参看这个网址:http://www.klduobao.com/mobile/GoGoodsMobile_shopGoGoods?shopId=1588081&orderCode=news

    这个方法不是真正的tab切换,其实每点击标签,都换了不同的跳转链接;如下图:

    然后这个页面处理分页的js如下:

    判断页面是否滑到了底部:

     总结:

    方法1是真正的tab切换,因为在一个页面进行的,以上处理方法的原理就是给一个参考变量和3个切换内容标识的变量,一一去对比参考变量的值到底是谁,如果为高手收益榜,就只加载高手收益榜的数据,并且scroll事件只影响此时的高手收益榜的内容块,同理如果为牛人收益榜,就只加载牛人收益榜的数据,并且scroll事件只影响此时的牛人收益榜的内容块,反正就是这么个理。虽然有点绕,但是理清楚了就简单了;

    方法2不是真正的tab切换,其实是页面直接的跳转,所以当然不会出现scroll事件互相影响的问题了,但是这个方法唯一的缺点就是要跳转页面url,这样要消耗数据流量一些;

    总之,2种方法都有优势和弊端,综合自己的项目来使用就好了。

    以上纯属个人愚解,如有错误还望保函非喜勿喷,谢谢。

  • 相关阅读:
    阻止JavaScript事件冒泡传递<转>
    小温谈数据库优化数据库设计篇
    名言集合
    SQL Server中获得EXEC的值<转>
    WIN2008 64位系统配置PHP的方法
    陪伴我作为程序员的9句名言<转>
    C# 的快捷键汇总(一)
    使用VB.NET开发复合控件
    C#写SQL SERVER2008存储过程
    c#图像处理入门
  • 原文地址:https://www.cnblogs.com/liujingjing/p/6054472.html
Copyright © 2020-2023  润新知