1. 程式人生 > >H5手機頁面滑動非同步載入資料

H5手機頁面滑動非同步載入資料

怎樣實現手機版的web頁面在滑動的時候非同步載入資料,直接貼程式碼,可以直接新建一個html頁面進行測試哦,注意這裡要引用jQuery外掛

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script src="Scripts/jquery-1.7.1.js"></script>
    <script>
        $(document).bind("scroll", srcollEvent);
        $(document).bind("touchstart", startEvent).bind("touchmove", moveEvent).bind("touchcancel", stopEvent).bind("touchend", stopEvent);
        var isScrollStop = true;  //頁面是否停止滾動 防止螢幕有滑動但還沒到底部就開始載入資料
        var isMoveDown = false;  //防止手指向上滑動螢幕開始載入資料
        var isLoading = false;   //防止非同步請求資料未返回到前端的時候重複提交請求
        var isMoved = false;   //手指是否在滑動螢幕 防止出現手指觸控式螢幕幕而沒有滑動就載入資料
        var startY = 0;
        var startX = 0;
        function srcollEvent() {
            if ($(document).scrollTop() > 0) {
                isScrollStop = false;
            }
            //如果是左右滑動非同步載入資料就用下面的程式碼
            /*
            if ($(document).scrollLeft() > 0) {
                isScrollStop = false;
            }*/
        }
        function startEvent() {
            startY = event.targetTouches[0].clientY;
            //如果是左右滑動載入資料就用下面的程式碼
            //startX = event.targetTouches[0].clientX;
            isScrollStop = true;
            isMoved = false;
            isMoveDown = false;
        }
        function moveEvent() {                     
            var Y = event.targetTouches[0].clientY;
            if (startY > Y) {
                isMoveDown = true;                
            } else {
                isMoveDown = false;
            }
            //如果是左右滑動載入資料就用下面的程式碼
            /*var X = event.targetTouches[0].clientX;
            if (startX > X) {
                isMoveDown = true;
            } else {
                isMoveDown = false;
            }*/
            isMoved = true;
           
        }
        function stopEvent() {
            if (isScrollStop && isMoved && !isLoading && isMoveDown) {
                console.log("分頁載入");
                loadData();
            }
        }
        var index = 0;
        function loadData() {   //模擬向後臺非同步載入資料
            isLoading = true;    //非同步載入資料之前先設定為正在等待資料        
            $("table").append("<tr><td>非同步載入資料" + index + "</td></tr>");
            $("table").append("<tr><td>非同步載入資料" + (index+1) + "</td></tr>");
            $("table").append("<tr><td>非同步載入資料" + (index+2) + "</td></tr>");
            $("table").append("<tr><td>非同步載入資料" + (index+3) + "</td></tr>");
            $("table").append("<tr><td>非同步載入資料" + (index+4) + "</td></tr>");
            $("table").append("<tr><td>非同步載入資料" + (index+5) + "</td></tr>");
            //此時資料已返回到前端
            index+=5;
            isLoading = false;
            isMoved = false;
        }
        function sleep() {
            var t1 = new Date();
            var t2 = new Date();
            while ((t2 - t1) < 3000) {
                t2 = new Date();
            }
        }
    </script>
</head>
<body >
    <table style="font-size:100px">
        <tr>
            <td>測試資料1</td>
        </tr>
        <tr>
            <td>測試資料2</td>
        </tr>
        <tr>
            <td>測試資料3</td>
        </tr>
        <tr>
            <td>測試資料4</td>
        </tr>
        <tr>
            <td>測試資料5</td>
        </tr>
        <tr>
            <td>測試資料6</td>
        </tr>
        <tr>
            <td>測試資料7</td>
        </tr>
        <tr>
            <td>測試資料1</td>
        </tr>
        <tr>
            <td>測試資料2</td>
        </tr>
        <tr>
            <td>測試資料3</td>
        </tr>
        <tr>
            <td>測試資料4</td>
        </tr>
        <tr>
            <td>測試資料5</td>
        </tr>
        <tr>
            <td>測試資料6</td>
        </tr>
        <tr>
            <td>測試資料7</td>
        </tr>
    </table>
</body>
</html>