热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

thinkPHP实现瀑布流

很多人都想做瀑布流的效果,这里告诉大家官网使用的方法,首先要下载瀑布流的插件jquery.masonry.min.js地址:http://masonry.desandro.com/index.html里面包含的很多示例.

很多人都想做瀑布流的效果,这里告诉大家官网使用的方法,首先要下载瀑布流的插件jquery.masonry.min.js 地址:http://masonry.desandro.com/index.html里面包含的很多示例.

流程:

1,页面初始化时,调用插件进行一次排版;

2,当用户将滚动条拖到底部时,用ajax加载一次数据,并排版显示

3,重复2,直到无数据

Html代码:

  1. > 
  2. <html xmlns="http://www.w3.org/1999/xhtml"> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  5. <title>Insert title heretitle> 
  6.  
  7. <style type="text/css"> 
  8. body {margin:40px auto; width:800px; font-size:12px; color:#666;} 
  9. .item{ 
  10. border: 1px solid #D4D4D4; 
  11. color: red; 
  12. margin: 0 10px 10px 0; 
  13. padding: 10px; 
  14. position: relative; 
  15. width: 200px; 
  16. .loading-wrap{ 
  17. bottom: 50px; 
  18. width: 100%; 
  19. height: 52px; 
  20. text-align: center; 
  21. display: none; 
  22. .loading { 
  23. padding: 10px 10px 10px 52px; 
  24. height: 32px; 
  25. line-height: 28px; 
  26. color: #FFF; 
  27. font-size: 20px; 
  28. border-radius: 5px; 
  29. background: 10px center rgba(0,0,0,.7); 
  30. .footer{ 
  31. border: 2px solid #D4D4D4; 
  32. style> 
  33.  
  34. head> 
  35. <body> 
  36.  
  37. <script type="text/Javascript" src="/test/public/Js/jquery-1.7.2.min.js">script> 
  38. <script type="text/Javascript" src="/test/public/Js/jquery.masonry.min.js">script> 
  39.  
  40.  
  41. <div id="container" class=" container"> 
  42.  
  43. <volist name="height" id="vo"> 
  44. <div class="item" style="height:{$vo}px;">瀑布流下来了div> 
  45. <input type="hidden" name="last_id" class="last_id" value="{$vo.id}"/> 
  46. volist> 
  47. div> 
  48.  
  49.  
  50. <div id="loading" class="loading-wrap"> 
  51. <span class="loading">加载中,请稍后...span> 
  52. div> 
  53.  
  54.  
  55. <div class="footer"><center>我是页脚center>div> 
  56.  
  57. <script type="text/Javascript"> 
  58. //用于转换unix时间戳 
  59. function unix_to_datetime(unix)  
  60. var now = new Date(parseInt(unix) * 1000); 
  61. return now.toLocaleString().replace(/年|月/g, "-").replace(/日/g, " "); 
  62. $(function(){ 
  63. //页面初始化时执行瀑布流 
  64. var $container = $(&#39;#container&#39;); 
  65. $container.masonry({ 
  66. itemSelector : &#39;.item&#39;, 
  67. isAnimated: true 
  68. }); 
  69. //用户拖动滚动条,达到底部时ajax加载一次数据 
  70. var loading = $("#loading").data("on", false);//通过给loading这个div增加属性on,来判断执行一次ajax请求 
  71. $(window).scroll(function(){ 
  72. if(loading.data("on")) return; 
  73. if($(document).scrollTop() > $(document).height()-$(window).height()-$(&#39;.footer&#39;).height()){//页面拖到底部了 
  74. //加载更多数据 
  75. loading.data("on", true).fadeIn(); //在这里将on设为true来阻止继续的ajax请求 
  76.  
  77. //获取最后一个id 
  78. var lastid = $(&#39;.last_id:last&#39;).val(); 
  79. $.get( 
  80. "getMore", //要跳转的页面 
  81. {lastid:lastid},//传值 
  82. function(data){ 
  83. //获取到了数据data,后面用JS将数据新增到页面上 
  84. var getdata = data.data; 
  85. var html = ""
  86. if($.isArray(getdata)){ 
  87. $.each(data.data,function(i,item) { 
  88. html += "<div class=\"item\" style=\"height:"+data[i]+"px;\">瀑布又流下来了div>"; 
  89. }); 
  90. var $newElems = $(html).css({ opacity: 0 }).appendTo($container); 
  91. $newElems.imagesLoaded(function(){ 
  92. $newElems.animate({ opacity: 1 }); 
  93. $container.masonry( &#39;appended&#39;, $newElems, true );  
  94. }); 
  95. //一次请求完成,将on设为false,可以进行下一次的请求 
  96. loading.data("on", false); 
  97. loading.fadeOut(); 
  98. }, 
  99. "json" 
  100. ); 
  101. }); 
  102. }); 
  103. script> 
  104. body> 
  105. html> 

Action代码

  1. //初始化的数据 
  2. public function lists(){  
  3. $data = D(&#39;Info&#39;)->order(&#39;id DESC&#39;)->limit(10)->select(); 
  4. $this->assign(&#39;data&#39;$data); 
  5. $this->display(); 
  6. //获取一次请求的数据 
  7. public function getMore(){  
  8. //获取最后一个id 
  9. if(!emptyempty($_GET[&#39;lastid&#39;]))$map[&#39;id&#39;] = array(&#39;lt&#39;$_GET[&#39;lastid&#39;]);  
  10. $data = D(&#39;Info&#39;)->where($map)->order(&#39;id DESC&#39;)->limit(10)->select(); 
  11. $this->ajaxReturn($data); 

注意:通过判断窗口是否滚动到页面底部来决定用ajax加载一次数据,如果不做处理,会一下子请求很多次,所以,要使用条件来限制.

我使用的是往一个元素上赋值 $("#loading").data("on", true);,在请求期间判断是true则不继续请求,然后在页面请求完成后再赋值为false.


推荐阅读
  • 现在的新手程序猿,动不动就是框架,就连外面培训的也是框架,我就问一句,没了框架是不是就啥也不会了 ... [详细]
  • 本文探讨了如何在JavaScript中调用PHP函数及实现两者之间的有效交互,包括通过AJAX请求、动态生成JavaScript代码等方法。 ... [详细]
  • 解决fetch上传图片至微信公众号H5页面的问题
    在近期的一个项目需求中,需要在微信公众号内嵌入H5页面,并实现用户通过该页面上传图片的功能,包括拍摄新照片或从已有相册中选择。前端开发中采用了fetch API进行接口调用,但遇到了上传图片时数据无法正确传递的问题。 ... [详细]
  • 本文介绍了jQuery的基本使用方法及AJAX技术的基础知识,包括选择器、事件处理、DOM操作、动画效果等核心功能,以及如何利用AJAX实现页面的部分刷新。 ... [详细]
  • 本文详细介绍了如何在JavaScript中使用jQuery库进行AJAX异步请求,包括请求的基本配置和处理流程。同时,探讨了阿里巴巴的FastJSON库在JSON数据解析中的应用,并简要介绍了Highcharts图表插件的使用方法。 ... [详细]
  • 如何清空Layui树结构
    本文将详细介绍如何使用Layui框架清空树形结构,包括创建树、添加节点以及实现清空功能的具体步骤。通过本文,您将能够掌握Layui树的管理技巧。 ... [详细]
  • django项目中使用手机号登录
    本文使用聚合数据的短信接口,需要先获取到申请接口的appkey和模板id项目目录下创建ubtils文件夹,定义返回随机验证码和调取短信接口的函数function.py文件se ... [详细]
  • 深入理解SAP Fiori及其核心概念
    本文详细介绍了SAP Fiori的基本概念、发展历程、核心特性、应用类型、运行环境以及开发工具等,旨在帮助读者全面了解SAP Fiori的技术框架和应用场景。 ... [详细]
  • 使用jQuery与百度地图API实现地址转经纬度功能
    本文详细介绍了如何利用jQuery和百度地图API将地址转换为经纬度,包括申请API密钥、页面构建及核心代码实现。 ... [详细]
  • 本文介绍了如何通过安装和配置php_uploadprogress扩展来实现文件上传时的进度条显示功能。通过一个简单的示例,详细解释了从安装扩展到编写具体代码的全过程。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • 如何高效渲染JSON数据
    本文介绍了在控制器中返回JSON结果的方法,并详细说明了如何利用jQuery处理和展示这些数据,为Web开发提供了实用的技巧。 ... [详细]
  • 开发笔记:异步实时搜索jquery select插件
    开发笔记:异步实时搜索jquery select插件 ... [详细]
  • 精选10款jQuery内联编辑插件
    本文精选了10款优秀的jQuery内联编辑插件,旨在帮助开发者实现页面内容的动态管理和即时编辑,提升用户体验。 ... [详细]
  • 本文探讨了如何利用 Application 对象在 PHP 应用程序中共享数据,特别是在多用户环境中保持数据的一致性和安全性。文章还介绍了 Application 对象的基本结构、方法和事件,并提供了实际应用示例。 ... [详细]
author-avatar
mobiledu2502885807
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有