亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

js實現加載更多功能實例

2019-11-20 08:38:46
字體:
來源:轉載
供稿:網友

項目的一個前端頁面展示已購買商品時,要求能下拉加載更多。關于如何實現『加載更多』功能,網上有插件可用,例如比較著名的使用iscroll.js實現的上拉加載更多、下拉刷新功能。

但實際用起來卻是很麻煩。由于是第三方插件,要按照對方定義的方法使用,用起來總感覺很不順心。再加上iscroll.js本身并沒有集成加載更多的功能,需要進行自行擴展。想繼續使用iscroll.js實現加載更多功能的,上面給的鏈接可以看看。

h5項目里需要實現簡單的分頁功能,由于是移動端,考慮用『加載更多』會更好,而不是PC端的翻頁。

基于按鈕實現加載更多

最簡單的就是給一個加載更多的按鈕,如果還有數據,點擊下加載更多,繼續拉幾條數據;直到沒有更多數據了,隱藏加載更多按鈕。

效果如下:

頁面html:

<div class="content">  <div class="weui_panel weui_panel_access">    <div class="weui_panel_hd">文章列表</div>    <div class="weui_panel_bd js-blog-list">          </div>  </div>    <!--加載更多按鈕-->  <div class="js-load-more">加載更多</div>  </div><script src="js/zepto.min.js"></script>

加載更多按鈕樣式:loadmore.css:

@charset "utf-8";.js-load-more{  padding:0 15px;  width:120px;  height:30px;  background-color:#D31733;  color:#fff;  line-height:30px;  text-align:center;  border-radius:5px;  margin:20px auto;  border:0 none;  font-size:16px;  display:none;/*默認不顯示,ajax調用成功后才決定顯示與否*/}

加載更多的js代碼:

$(function(){  /*初始化*/  var counter = 0; /*計數器*/  var pageStart = 0; /*offset*/  var pageSize = 4; /*size*/    /*首次加載*/  getData(pageStart, pageSize);    /*監聽加載更多*/  $(document).on('click', '.js-load-more', function(){    counter ++;    pageStart = counter * pageSize;        getData(pageStart, pageSize);  });});

這里的代碼并不多。其中getData(pageStart, pageSize)是業務邏輯代碼,負責從服務端拉去數據。這里給個示例:

function getData(offset,size){  $.ajax({    type: 'GET',    url: 'json/blog.json',    dataType: 'json',    success: function(reponse){        var data = reponse.list;      var sum = reponse.list.length;        var result = '';            /****業務邏輯塊:實現拼接html內容并append到頁面*********/            //console.log(offset , size, sum);            /*如果剩下的記錄數不夠分頁,就讓分頁數取剩下的記錄數      * 例如分頁數是5,只剩2條,則只取2條      *      * 實際MySQL查詢時不寫這個不會有問題      */      if(sum - offset < size ){        size = sum - offset;      }            /*使用for循環模擬SQL里的limit(offset,size)*/      for(var i=offset; i< (offset+size); i++){        result +='<div class="weui_media_box weui_media_text">'+            '<a href="'+ data[i].url +'" target="_blank"><h4 class="weui_media_title">'+ data[i].title +'</h4></a>'+            '<p class="weui_media_desc">'+ data[i].desc +'</p>'+          '</div>';      }        $('.js-blog-list').append(result);            /*******************************************/        /*隱藏more按鈕*/      if ( (offset + size) >= sum){        $(".js-load-more").hide();      }else{        $(".js-load-more").show();      }    },    error: function(xhr, type){      alert('Ajax error!');    }  });}

還是比較簡單的。

基于滾動事件實現加載更多
上面我們通過按鈕點擊實現加載更多,整體過程還是比較簡單的。這里,我提供另一種方法實現加載更多:基于于滾動(scroll)事件。

直接貼代碼了:

$(function(){  /*初始化*/  var counter = 0; /*計數器*/  var pageStart = 0; /*offset*/  var pageSize = 7; /*size*/  var isEnd = false;/*結束標志*/    /*首次加載*/  getData(pageStart, pageSize);    /*監聽加載更多*/   $(window).scroll(function(){    if(isEnd == true){      return;    }    // 當滾動到最底部以上100像素時, 加載新內容    // 核心代碼    if ($(document).height() - $(this).scrollTop() - $(this).height()<100){      counter ++;      pageStart = counter * pageSize;            getData(pageStart, pageSize);    }  });});

可以看出,代碼變化不大,主要看核心代碼里的判斷條件:當滾動到最底部以上100像素時, 加載新內容。

業務邏輯getData(pageStart, pageSize)只需要把if ( (offset + size) >= sum)里面的邏輯改成:

if ( (offset + size) >= sum){  isEnd = true;//沒有更多了}

就行了。

當然,這里面還有要優化的地方,例如:如何防止滾動過快,服務端沒來得及響應造成多次請求?

綜合實例

通過上面的例子,顯然第二種更好,不用去點擊。但是第二個方法有個問題:

如果設置頁面大小每次顯示2條或3條(size=2),總記錄是20,你會發現無法觸發向下滾動加載更多的邏輯。這時候有個加載更多的點擊按鈕就好了。

因此,我們可以把以上兩種方法合在一起:

默認使用滾動事件實現加載更多,當顯示數目太小不足以觸發向下滾動加載更多的邏輯時,使用加載更多點擊事件。
這里,我對加載更多這個行為進行簡單的抽象,寫了個簡單的插件:

loadmore.js

/* * loadmore.js * 加載更多 * * @time 2016-4-18 17:40:25 * @author 飛鴻影~ * @email jiancaigege@163.com * 可以傳的參數默認有:size,scroll 可以自定義 * */;(function(w,$){    var loadmore = {     /*單頁加載更多 通用方法     *      * @param callback 回調方法     * @param config 自定義參數     * */    get : function(callback, config){      var config = config ? config : {}; /*防止未傳參數報錯*/      var counter = 0; /*計數器*/      var pageStart = 0;      var pageSize = config.size ? config.size : 10;      /*默認通過點擊加載更多*/      $(document).on('click', '.js-load-more', function(){        counter ++;        pageStart = counter * pageSize;                callback && callback(config, pageStart, pageSize);      });            /*通過自動監聽滾動事件加載更多,可選支持*/      config.isEnd = false; /*結束標志*/      config.isAjax = false; /*防止滾動過快,服務端沒來得及響應造成多次請求*/      $(window).scroll(function(){                /*是否開啟滾動加載*/        if(!config.scroll){          return;        }                /*滾動加載時如果已經沒有更多的數據了、正在發生請求時,不能繼續進行*/        if(config.isEnd == true || config.isAjax == true){          return;        }                /*當滾動到最底部以上100像素時, 加載新內容*/        if ($(document).height() - $(this).scrollTop() - $(this).height()<100){          counter ++;          pageStart = counter * pageSize;                    callback && callback(config, pageStart, pageSize);        }      });      /*第一次自動加載*/      callback && callback(config, pageStart, pageSize);    },        }  $.loadmore = loadmore;})(window, window.jQuery || window.Zepto);

如何使用呢?很簡單:

$.loadmore.get(getData, {  scroll: true, //默認是false,是否支持滾動加載  size:7, //默認是10  flag: 1, //自定義參數,可選,示例里沒有用到});

第一個參數是回調函數,即我們的業務邏輯。我把最終修改過的業務邏輯方法貼出來:

function getData(config, offset,size){  config.isAjax = true;  $.ajax({    type: 'GET',    url: 'json/blog.json',    dataType: 'json',    success: function(reponse){          config.isAjax = false;      var data = reponse.list;      var sum = reponse.list.length;            var result = '';            /************業務邏輯塊:實現拼接html內容并append到頁面*****************/            //console.log(offset , size, sum);            /*如果剩下的記錄數不夠分頁,就讓分頁數取剩下的記錄數      * 例如分頁數是5,只剩2條,則只取2條      *      * 實際MySQL查詢時不寫這個      */      if(sum - offset < size ){        size = sum - offset;      }            /*使用for循環模擬SQL里的limit(offset,size)*/      for(var i=offset; i< (offset+size); i++){        result +='<div class="weui_media_box weui_media_text">'+            '<a href="'+ data[i].url +'" target="_blank"><h4 class="weui_media_title">'+ data[i].title +'</h4></a>'+            '<p class="weui_media_desc">'+ data[i].desc +'</p>'+          '</div>';      }      $('.js-blog-list').append(result);            /*******************************************/            /*隱藏more*/      if ( (offset + size) >= sum){        $(".js-load-more").hide();        config.isEnd = true; /*停止滾動加載請求*/        //提示沒有了      }else{        $(".js-load-more").show();      }    },    error: function(xhr, type){      alert('Ajax error!');    }  });}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品电影一区| 欧美裸体xxxxx| 亚洲人午夜精品免费| 色老头一区二区三区| 77777少妇光屁股久久一区| 日韩女优人人人人射在线视频| 日韩av三级在线观看| 精品久久国产精品| 亚洲无线码在线一区观看| 久久99精品久久久久久琪琪| 久久久久久午夜| 国产不卡av在线免费观看| 久久久免费高清电视剧观看| 91网在线免费观看| 久久久久久久999| 亚洲免费伊人电影在线观看av| 国产男女猛烈无遮挡91| 亚洲国内高清视频| 一区二区日韩精品| 97免费在线视频| 456国产精品| 91精品免费视频| 日韩www在线| 国产精品一区二区av影院萌芽| 青青久久av北条麻妃黑人| 日韩免费观看视频| 亚洲成成品网站| 亚洲天堂视频在线观看| 欧美有码在线观看视频| 97精品久久久中文字幕免费| 欧美国产亚洲精品久久久8v| 国产精品自拍小视频| 精品在线小视频| 欧美裸体xxxxx| 91成人在线播放| 日韩免费av一区二区| 久久久久久一区二区三区| 亚洲精品一区二区久| 中文字幕精品视频| xvideos国产精品| 一区二区成人av| 久久久噜噜噜久噜久久| 久久精品国产99国产精品澳门| 亚洲毛片一区二区| 永久555www成人免费| 国产在线a不卡| 国产精品久久久久久久久男| 欧美日韩国产激情| 国产精品第七影院| 国产自摸综合网| 亚洲欧美一区二区三区在线| 久久精品国产2020观看福利| 2019中文字幕在线| 精品视频在线导航| 日本精品免费观看| 久久久久女教师免费一区| 亚洲综合日韩在线| 成人国产精品色哟哟| 亚洲欧美日韩精品久久奇米色影视| 日本成人激情视频| 久久久av亚洲男天堂| 成人综合国产精品| 亚洲国产日韩欧美在线图片| 欧美亚洲视频在线观看| 91精品视频在线看| 91精品国产综合久久久久久久久| 91视频九色网站| 91在线中文字幕| 国产精品v日韩精品| 国产精品日韩av| 国产日产欧美精品| 亚洲男人天堂久| 欧美在线视频免费播放| 亚洲伊人成综合成人网| 色妞色视频一区二区三区四区| 久久国产精品视频| 国产专区欧美专区| 9.1国产丝袜在线观看| 国产精品成人品| 日韩欧美在线网址| 51精品国产黑色丝袜高跟鞋| 欧美精品激情blacked18| 色婷婷久久一区二区| 亚洲成人av片在线观看| 色在人av网站天堂精品| 欧美俄罗斯性视频| 国产精品成人免费电影| 精品国产自在精品国产浪潮| 亚洲精品大尺度| 国产福利视频一区二区| 中文字幕亚洲欧美一区二区三区| 最近的2019中文字幕免费一页| 亚洲欧美另类国产| 91精品视频大全| 成人av在线网址| 综合欧美国产视频二区| 国产在线高清精品| 日韩在线视频国产| 亚洲电影免费观看高清完整版| 亚洲sss综合天堂久久| 日韩最新在线视频| 国产精品毛片a∨一区二区三区|国| 亚洲精品欧美一区二区三区| 亚洲精品少妇网址| 日韩中文字幕在线精品| 日韩av在线网页| 国产亚洲日本欧美韩国| 欧美激情综合色综合啪啪五月| 丁香五六月婷婷久久激情| 精品国产一区二区三区在线观看| 少妇高潮久久77777| 国产精品美女久久久免费| 精品五月天久久| 久久精品国产清自在天天线| 亚洲视频999| 国产成人一区二| 国产成人福利视频| 国产69久久精品成人| 精品久久久精品| 一色桃子一区二区| 98视频在线噜噜噜国产| 亚洲精品videossex少妇| 亚洲国产欧美一区二区三区久久| 有码中文亚洲精品| 亚洲天堂av网| 欧美在线视频观看| 亚洲在线视频福利| 欧美精品一区三区| 久久精品国产欧美亚洲人人爽| 亚洲精品电影在线| 欧美最猛性xxxxx免费| 国产精品久久av| 亚洲图片在区色| 欧美裸体视频网站| 国产精品视频区| 精品高清美女精品国产区| 尤物99国产成人精品视频| 午夜精品一区二区三区视频免费看| 欧美激情在线观看视频| 另类美女黄大片| 亚洲视屏在线播放| 日日摸夜夜添一区| 日韩av免费网站| 欧美超级免费视 在线| 亚洲欧美中文日韩v在线观看| 日韩av在线免费看| 国产亚洲视频在线| 亚洲免费视频一区二区| 精品久久久国产精品999| 日本欧美中文字幕| 亚洲精品suv精品一区二区| 国产欧洲精品视频| 日韩欧美国产视频| 欧美性videos高清精品| 欧美成人午夜剧场免费观看| 日韩欧美高清在线视频| 久久精品国产一区二区电影| 国产精品999999| 在线亚洲欧美视频| 国产成人在线视频| 九九久久久久99精品| 欧美成人免费全部观看天天性色| 亚洲欧洲日本专区| 国产精品在线看|