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種方法都有優勢和弊端,綜合自己的項目來使用就好了。

以上純屬個人愚解,如有錯誤還望保函非喜勿噴,謝謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM