1. html+css部分
<div class="container"> <div class="items"> </div> <div class="btn">点击加载</div> </div> .container { width: 1200px; margin: 0 auto; padding-top: 40px; } .items { position: relative; } .item { width: 232px; position: absolute; left: 0; top: 0; box-shadow: 0px 0px 30px rgba(0, 0, 0, 0.3); } .item img { display: block; width: 100%; height: 300px; } .item:nth-child(4) img { height: 400px; } .item:nth-child(2) img { height: 100px; } .item:nth-child(3) img { height: 300px; } /*按钮的样式.*/ .container > .btn { width: 280px; height: 40px; margin: 30px auto; text-align: center; line-height: 40px; background-color: #CCC; border-radius: 6px; font-size: 24px; cursor: pointer; } .container > .loading { background-color: transparent; }2. jquery 实现瀑布流布局
/** * @author zsw * @date 2019/7/17 20:40 * @version 1.0 */ $.fn.waterfall = function () { let $items = $(this); //获取父容器宽度 let parentWidth = $items.width(); //获取所有子元素 item let $childRen = $items.children(".item") //获取所有子元素 宽度 let width = $childRen.width(); // 设置每一行有多少子元素 后期可以根据浏览器的宽度来计算每行摆放多少个 let column = 5; //获取元素间的间隔 let space = (parentWidth-column*width)/(column-1) let arr = []; $childRen.each((index,item)=>{ let $dom = $(item) if (index<5) { $dom.css({ top:0, left:index*(space+width) }) //保存第一行高度 arr.push($dom.height()) }else{ let minIndex = 0; let minHeight = arr[minIndex]; //对arr中的高度进行排序 找到最小值的高度 for (let i = 0; i < arr.length; i++) { if (arr[i]<minHeight) { minHeight = arr[i]; minIndex = i; } } $dom.css({ left:minIndex*(width+space), top:minHeight+space }) //重新赋值最小值的高度 arr[minIndex] = minHeight+space+$dom.height(); } }) //item中最高的高度 赋值给 items 设置按钮的位置 let maxHeight =Math.max(...arr); $items.height(maxHeight) }3. 定义模板 解析后台传递过来的数据
<!--关于这部分就不解释了 以前的文字里面有详细解释着模板的用法--> <script src="js/template-web.js"></script> <script type="text/html" id="templateId"> {{each rows as item}} <div class="item"> <img src="{{item.lifephoto}}" alt="./"> <p> {{item.username}} </p> </div> {{/each}} </script>
4. 定义一个对象 实现数据的动态加载 和 滚动加载数据
//避免和外界js产生冲突 (function (hb) { let cssmhb = { config: { // 传递到后台的参数 params: { page: 1, pageSize: 5 } }, init: function () { this.render() this.initEvent(); }, render: function () {//获取数据 let _this = this; $.ajax({ type: "get", url: "http://kkb_day.zsw/teacherManage/api/queryTeacher.php", data: { page: _this.config.params.page, pageSize: _this.config.params.pageSize }, dataType: "json", success: function (data) { console.log(data); if (data.rows.length == 0) { //说明没有更多的数据. $(".btn").text("没有更多的数据了."); return; } var html = template("templateId", data); //获取到元素网页面上面放,然后定位. $(".items").append(html).waterfall(); //数据已经渲染完成 $(".btn").removeClass("loading").text("点击加载"); } }) }, initEvent: function () { let _this = this; //点击加载数据 hb(".btn").on("click", function () { //放置重复提交 if ($(this).hasClass("loading")) return; $(this).addClass("loading").text("正在加载中............"); _this.config.params.page += 1; _this.render(); }); //滚动加载数据 hb(window).on("scroll", function (ev) { //内容区域高度 let contentHeight = hb(document).height(); //窗口高度 let winHeight = hb(window).height(); let top = hb(this).scrollTop(); if (contentHeight-(winHeight+top)<40){ console.log("已经到底部了"); //出发加载按钮的点击事件 $(".btn").click() } }); } } cssmhb.init(); })($)
5. 关于后台的php代码 我写的上一篇文章有记载 https://blog.csdn.net/qq_43512502/article/details/96200457