当前位置:   article > 正文

加载更多功能的实现

加载更多功能的实现

加载更多功能的实现

当要显示的数据量非常大时,如果我们一下子显示全部,往往不利于网站优化

效果图:

 那么这个效果是如何实现的呢?

以tp5举例:

主页显示的数据设置为5,就是刚加载时只显示5条,每点击一次新加载5条(这些数据可以自己决定)

主页的控制器:Index.php:

  1. public function index(){
  2. // 显示文章列表 只显示5条
  3. $article = DB::table('article')->order('date desc')->limit(2)->select();
  4. $this->assign('article',$article);
  5. return $this->fetch();
  6. }

对应的视图:绑定load事件

  1. <div id="article">
  2. {volist name="article" id="vo"}
  3. <div class="article">
  4. //...显示文章的具体纤细
  5. </div>
  6. {/volist}
  7. <!--加载更多的按钮-->
  8. <div data-page="0" id="load-more" onclick="load(this)">阅读更多</div>
  9. </div>

load事件:(传给后台的数据是data-page自定义属性值,点击后自增1

  1. function load(obj){
  2. var page = obj.getAttribute('data-page');
  3. // 提示正在加载
  4. $('#load-more').html('loading ......');
  5. $.ajax({
  6. type:'POST',
  7. url:ThinkPHP['ROOT']+'/index.php/index/index/more',
  8. data:{
  9. 'page':page,
  10. },
  11. success:function(res){
  12. if(res==''){
  13. $('#load-more').html('没有更多数据了').css('color','red');
  14. return false;
  15. }
  16. $('#load-more').html('阅读更多');
  17. $('#load-more').before(res);
  18. page++;
  19. obj.setAttribute('data-page',page);
  20. }
  21. })
  22. }

 

对应控制器加载更多的more方法:(每次根据前台传的值进行查询)

  1. public function more(){
  2. if($this->request->isAjax()){
  3. $firstNum = 5; //最先显示的条数
  4. $num = 5; //点击一次显示的条数
  5. $page = input('post.page'); //接收的page 动态的
  6. // 显示文章列表
  7. $n = $firstNum+($page*$num);
  8. $article = DB::table('article')->order('date desc')->limit($n,$num)->select();
  9. //返回数据
  10. $this->assign('ajaxArticle', $article);
  11. return $this->fetch(); //返回视图
  12. }
  13. }

对应返回的视图:more.html

  1. {volist name="ajaxArticle" id="vo"}
  2. <div class="article">
  3. //....文章的具体内容
  4. </div>
  5. {/volist}

ajax请求成功后将数据(整个视图)填充到 内容区(加载更多的前面)

  1. success:function(res){
  2. if(res==''){
  3. $('#load-more').html('没有更多数据了').css('color','red');
  4. return false;
  5. }
  6. $('#load-more').html('阅读更多');
  7. $('#load-more').before(res);
  8. page++;
  9. obj.setAttribute('data-page',page);
  10. }

这个流程就是

ajax请求->控制器查询返回视图->ajax成功后在回调函数中把数据(视图)填充到内容区。

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

闽ICP备14008679号