当前位置:   article > 正文

html5上划实现分页加载_html5分页

html5分页

一.功能分析

当页面有许多相同类型数据需要加载,而且单个屏幕不足以显示这些内容,就需要使用分页加载方法,在手机客户端,一般都是使用上划下划的方式,为了有更好的用户体验,还需要在加载数据前,显示类似“加载中...”的提示,在数据加载完成后,隐藏加载提示。

二.滑动加载实现方法

1.实现方法1

可使用jQuery的scroll(滑动)事件来触发,用当前页面的总高度减去向上滑动的高度,如果小于当前浏览器窗口的高度,就表面页面已经被滑动到了最低端,这个时候就可以加载更多数据。代码如下:

html代码如下:

  1. <div class="mod comment">
  2. <div class="head">
  3. <i class="icon icon-comment-o"></i>留言
  4. </div>
  5. <div class="body">
  6. <textarea id="dome" class="commentArea"></textarea>
  7. <div class="addMessageBtn">发布</div>
  8. <div style="clear: both;"></div>
  9. <ul class="commentList"></ul>
  10. </div>
  11. </div>
  12. <div id="loading" style="position:relative;">
  13. <img class="loading-gif" src="/wishDriftBottle/imgs/sourceImgs/loading_bg_transparent.gif">
  14. <div class="loading-text">加载中...</div>
  15. </div>


js代码如下:

  1. //页面拉到最下方,加载更多评论
  2. $(window).scroll(function(){
  3. if (isLoading == true) {
  4. if (($("body").height() - $("body").scrollTop()) <= document.documentElement.clientHeight) {
  5. $("#loading").show();
  6. messagePage++;
  7. getOnePageMessage(id ,messagePage);
  8. }
  9. }
  10. });

  1. function getOnePageMessage(id, page){
  2. var onePageMessageTmp;
  3. var messagePageCount;
  4. isLoading = false;
  5. $.ajax({
  6. url : serverPrefix + "/wbLeaveMessage/getLeaveMessage",
  7. type : "get",
  8. dataType: "json",
  9. data: {
  10. wbId: id,
  11. messageType: 1,
  12. page: page,
  13. pageSize: 10
  14. },
  15. success : function (data) {
  16. if (data.code == 0){
  17. messagePageCount = data.result.pageCount;
  18. onePageMessageTmp = data.result.leaveMessages;
  19. if ((onePageMessageTmp.length == 0) || (messagePageCount == 1)) { // 无数据或只有一页数据,隐藏加载提示
  20. $("#loading").hide();
  21. }
  22. if (onePageMessageTmp.length != 0) {
  23. addMessage(onePageMessageTmp);
  24. isLoading = true;
  25. }
  26. }
  27. else{
  28. onePageMessageTmp.length = 0;
  29. $("#loading").hide();
  30. }
  31. }
  32. });
  33. }

       这种方法优点是代码简单易懂,好添加。缺点是页面向上滑动时,整个页面都在向上滚动,会看不到页面顶部的内容。我做的心愿漂流瓶项目的分页加载就是使用的上面这张方法。需要注意的是,在函数“getOnePageMessage()”中,ajax需要使用异步通信模式,否则会导致刷新页面时出现误加载两页数据的情况。页面地址:心愿漂流瓶

加载提示的效果如下图所示:


  经过上网查资料,通常加载提示应在ajax通信前显示,在ajax的success()或error()中隐藏。但是在我实际调试项目的过程中,发现这样操作等页面拉到最下端时,加载提示早就隐藏了,没有起到提示用户的作用,所以我换了一种方式,加载提示一直显示,只有页面拉到最低端时,用户能够明显看到加载提示,然后会加载新的分页,加载提示被新的分页挤到屏幕外面。当所有数据加载完成时,才隐藏加载提示。

2.实现方法2

  为了有更好的分页加载效果,我在网上查了一些分页加载的插件,大家推荐最多的是iscroll.js这个插件,我把这个插件加入到我做的晒照片的项目中了,页面地址:晒照片有兴趣的童鞋可以看看这个插件的上拉下滑已经和IOS和android的效果差不多了。

html代码如下:

  1. <!--选手列表,使用js动态加载-->
  2. <div id="wrapper">
  3. <div id="scroller">
  4. <div class="newest">
  5. <div class="newestPlayers"></div>
  6. <img id="newest-loading-gif" class="loading-gif" src="/vote/imgs/sourceImgs/loading_1shi.gif">
  7. <div id="newest_scroller-pullUp" class="scroller-pullUp">
  8. <span class="pull-up-msg">加载中...</span>
  9. </div>
  10. </div>
  11. <div class="ranking" style="display: none;">
  12. <div class="rankingPlayers"></div>
  13. <img id="ranking-loading-gif" class="loading-gif" src="/vote/imgs/sourceImgs/loading_1shi.gif">
  14. <div id="ranking_scroller-pullUp" class="scroller-pullUp">
  15. <span class="pull-up-msg">加载中...</span>
  16. </div>
  17. </div>
  18. </div>
  19. </div>

js代码如下:

  1. var myScroll;
  2. var distance = 30; //滑动距离
  3. myScroll = new IScroll('#wrapper', {
  4. probeType: 3,
  5. mouseWheel: true,
  6. preventDefault: false, // 添加此语句,点击事件才有效
  7. });
  8. document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); // 无此语句,在微信中滑动页面较卡
  9. // 上拉滑动事件
  10. myScroll.on("slideUp",function(){
  11. if(this.maxScrollY - this.y > distance){
  12. if (listMethod == 0) {
  13. if (newestPage < newestPageCount) {
  14. newestPage++;
  15. getNewestPlayersInfo(newestTimestamp, tId);
  16. addPlayer(newestList, listMethod);
  17. myScroll.refresh(); // 刷新后,页面才能向下滑动
  18. }
  19. if (newestPage == newestPageCount) {
  20. $("#newest_scroller-pullUp").hide(); // 无数据或者加载完成后,隐藏加载提示
  21. $("#newest-loading-gif").hide();
  22. }
  23. }
  24. else {
  25. if (rankingPage < rankingPageCount) {
  26. rankingPage++;
  27. getRankingPlayersInfo(rankingPage, tId);
  28. addPlayer(rankingList, listMethod);
  29. myScroll.refresh(); // 刷新后,页面才能向下滑动
  30. }
  31. if (rankingPage == rankingPageCount) {
  32. $("#ranking_scroller-pullUp").hide(); // 无数据或者加载完成后,隐藏加载提示
  33. $("#ranking-loading-gif").hide();
  34. }
  35. }
  36. }
  37. });


   这个插件的优点是滑动效果美观,和原生ios、android相似。缺点是滑动时可见div层wrapper的高度是固定的,如果页面其它部分占用空间过大,导致wrapper元素高度较小,滑动起来的用户体验就不好,这也是为什么方法一用在心愿漂流瓶的项目,而这个方法用在晒照片的项目上。

       加载提示的显示隐藏和方法1相同,默认处在底部导航栏的下方,页面向上滚动时,才会显示出来,当所有数据加载完成时,才隐藏加载提示。

三.iscroll.js的bug

安卓手机上划超出屏幕回弹失效的问题(待补充)。

苹果手机上划超出屏幕回弹失效的解决办法(待补充)。



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/97474
推荐阅读
相关标签
  

闽ICP备14008679号