分頁插件思想:pc載入更多功能和移動端下拉刷新載入數據

来源:http://www.cnblogs.com/puyongsong/archive/2016/11/06/6035691.html
-Advertisement-
Play Games

感覺一個人玩lol也沒意思了,玩會手機,看到這個下拉刷新功能就寫了這個demo! 這個demo寫的比較隨意,咱不能當做插件使用,基本思想是沒問題的,要用就自己封裝吧! 直接上代碼分析下吧! 佈局: 就2行,只為實現功能,足矣! js也不複雜,先定義2個變數,貫穿整個demo,進了不要全局變數,當然, ...


  感覺一個人玩lol也沒意思了,玩會手機,看到這個下拉刷新功能就寫了這個demo!

  這個demo寫的比較隨意,咱不能當做插件使用,基本思想是沒問題的,要用就自己封裝吧!

  直接上代碼分析下吧!

佈局:

<ul class="show-area" style="min-height:100px;"></ul>
<button class='page-btn-nick' >載入更多</button>

  就2行,只為實現功能,足矣!

  js也不複雜,先定義2個變數,貫穿整個demo,進了不要全局變數,當然,封裝的時候也可以當做閉包參數!

var m=0,n=2;//m:button點擊次數 n:一次載入幾條數據

請求:

$.ajax('paging.html')

  這裡我就寫的本頁面地址作為測試url。

下麵請求成功後的處理就是重點了:

                    var obj={developer:[{name:'nick'},{name:'ljy'},{name:'xzl'},{name:'jeson'},{name:'yst'},{name:'zhw'},{name:'wqq'}]}
                    response=obj.developer;//假設請求到的數據是obj
                    m++;
                    var data='',elm='';
                    if(m>(response.length%n==0?response.length/n:parseInt(response.length/n))){
                        data=response.slice(n*(m-1));
                        $('.page-btn-nick').html('沒有更多了');
                        $('.page-btn-nick').attr('disabled','disabled');
                    }else{
                        data=response.slice(n*(m-1),n*m);
                    }

中心思想:

  請求按鈕點擊一次,m+1,講請求的數據拆分,只要需要的數據data;

data=response.slice(n*(m-1),n*m);

  slice(s,e)函數獲取請求到的數據的一部分,s:response的起始位置,e結尾位置(取不到e位置的元素),返回值是一個含頭不含尾的數組。

這裡由於開始預設載入n條數據,m已經加了一次1了,所以要s和e要對應的改變;

將數據動態載入到頁面:

                    var len=data.length;
                    for(var i= 0;i<len;i++){
                        elm+="<li>"+data[i].name+"</li>";
                    }
                    $('.show-area').append(elm);

這裡的append()要比html()更優!

  我看有些developer是勇的html(),這樣每載入一次,頁面中的所有li將全部清空,在重新載入所有的li,感覺每次載入都要載入有點多餘的數據,浪費啊……

  看上面的數據就知道,我是講每次請求的數據在slice()一次,在添加到頁面。這要寫我每載入一次,只把這次載入的數據append到ul的最後,以前的li並不會清空,這要載入的數據就是每次想要多加的必要數據,沒有重覆添加,感覺給力點吧!

  後面我把請求數據的getData()作為button點擊事件處理函數,同時放在判斷後的下拉事件中,就可以實現點擊按鈕動態載入數據和下拉刷新載入數據了!

最後附上完整代碼:

<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
    <title>paging nick</title>
    <style>
    </style>
</head>
<body>
    <ul class="show-area" style="min-height:100px;"></ul>
    <button class='page-btn-nick' >載入更多</button>
    <script src='http://apps.bdimg.com/libs/jquery/2.1.1/jquery.min.js'></script>
    <script>
        ;(function(){
            getData();
            var m=0,n=2;//m:button點擊次數 n:一次載入幾條數據
            $('.page-btn-nick').click(getData);
            function getData(){
                $.ajax('paging.html').then(function(response){//測試url寫本頁面
                    var obj={developer:[{name:'nick'},{name:'ljy'},{name:'xzl'},{name:'jeson'},{name:'yst'},{name:'zhw'},{name:'wqq'}]}
                    response=obj.developer;//假設請求到的數據是obj
                    m++;
                    var data='',elm='';
                    if(m>(response.length%n==0?response.length/n:parseInt(response.length/n))){
                        data=response.slice(n*(m-1));
                        $('.page-btn-nick').html('沒有更多了');
                        $('.page-btn-nick').attr('disabled','disabled');
                    }else{
                        data=response.slice(n*(m-1),n*m);
                    }
                    var len=data.length;
                    for(var i= 0;i<len;i++){
                        elm+="<li>"+data[i].name+"</li>";
                    }
                    $('.show-area').append(elm);
                },function(err){
                    console.log(err);
                });
            }

            $(".show-area").on("touchstart", function(e) {
                e.preventDefault();
                startX = e.originalEvent.changedTouches[0].pageX,
                        startY = e.originalEvent.changedTouches[0].pageY;
            });
            $(".show-area").on("touchmove", function(e) {
                e.preventDefault();
                moveEndX = e.originalEvent.changedTouches[0].pageX,
                        moveEndY = e.originalEvent.changedTouches[0].pageY,
                        X = moveEndX - startX,
                        Y = moveEndY - startY;

                if ( Math.abs(X) > Math.abs(Y) && X > 0 ) {
                    alert("left 2 right");
                }
                else if ( Math.abs(X) > Math.abs(Y) && X < 0 ) {
                    alert("right 2 left");
                }
                else if ( Math.abs(Y) > Math.abs(X) && Y > 0) {
                    alert("top 2 bottom");
                    getData();
                }
                else if ( Math.abs(Y) > Math.abs(X) && Y < 0 ) {
                    alert("bottom 2 top");
                }
                else{
                    alert("just touch");
                }
            });
        }());
    </script>
</body>
</html>
View Code

  可以直接複製完整代碼,webstorm打開看看看,測試下吧!

移動端下拉事件就一筆帶過了,可以參考我寫的有關於移動化滑動事件的博文!

鄙人技術有限,若有不妥,望不吝賜教!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • html5+jqueryMobile的組合可以直接開發web版的app,所以用到我當前app中的推廣註冊頁的編寫是很恰當的,其實只要你熟悉html4+jquery的組合開發,那麼html5+jqueryMobile你會立刻上手。html5比html4多了很多的標簽,特別是多媒體這塊有了很好的支持,但 ...
  • clear:left;表示左側不能有浮動元素。 clear:right;表示右側不能有浮動元素。 clear:both;表示左右兩側都不能有浮動元素。 但在使用時,還得考慮css優先順序問題。相同類型選擇器制定的樣式,在樣式表文件中,越靠後的優先順序越高 。 當所有元素的clear屬性都設為right時 ...
  • (1)$(selector).each(),遍歷函數,選中的標簽中的每一個執行function(I,element),i,是其中標簽的索引(0~selector.length-1).用於對象,element是指當前對象。 (2)$.each(); 是對數組以及對象集合操作。 如果是數組:var ar ...
  • 2016-11-06 《CSS入門經典》第七章 1.在HTML中使用CSS樣式表的三種方式: (1)內聯的樣式表。 eg:<em style="background-white">LIN</em> (2)嵌入式樣式表。 即在<head>標簽內嵌入<style>標簽及具體的樣式設置內容。 (3)外部鏈 ...
  • HTML5 拖放 draggable=true draggable=true draggable=true draggable=true draggable=true draggable=true draggable=true draggable=true dragstart 拖放開始的時候觸發 d ...
  • Cookie 什麼是cookie? cookie 是存儲於訪問者的電腦中的變數。每當同一臺電腦通過瀏覽器請求某個頁面時,就會發送這個 cookie。你可以使用 JavaScript 來創建和取回 cookie 的值。 什麼是cookie? cookie 是存儲於訪問者的電腦中的變數。每當同一臺 ...
  • 集合類似於數組,但是集合中的元素是唯一的,沒有重覆值的。就像你學高中數學的概念一樣,集合還可以做很多比如,並集,交集,差集的計算。在ECMA6之前,JavaScript沒有提供原生的Set類,所以只能手動實現,不過手動實現的好處在於,幫助我們瞭解集合的原理。關於Redis集合的應用,你可以移步到這篇 ...
  • 之前使用過此 widget,如今再次需要,發現很多東西已經記不起來了,當然之前用的版本也不一樣。 使用之前當然是先認真閱讀官方的說明文檔和示例,這點很重要,而不是東一塊西一點的去網上瞎找資料。Options,Methods,Events 區分的很詳細,參考 jQuery Autocomplete W ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...