01.gif

  1. <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
  2. <style>
  3. *{margin:0;padding:0}
  4. img{
  5. width:240px
  6. }
  7. .item{
  8. border:1px solid #eee;
  9. padding:20px;
  10. float:left
  11. }
  12. </style>
  13. <div class="content">
  14. <div class="item">
  15. <img src="images/01.jpg" alt="">
  16. </div>
  17. <div class="item">
  18. <img src="images/02.jpg" alt="">
  19. </div>
  20. <div class="item">
  21. <img src="images/03.jpg" alt="">
  22. </div>
  23. <div class="item">
  24. <img src="images/04.jpg" alt="">
  25. </div>
  26. <div class="item">
  27. <img src="images/05.jpg" alt="">
  28. </div>
  29. <div class="item">
  30. <img src="images/06.jpg" alt="">
  31. </div>
  32. <div class="item">
  33. <img src="images/07.jpg" alt="">
  34. </div>
  35. <div class="item">
  36. <img src="images/08.jpg" alt="">
  37. </div>
  38. <div class="item">
  39. <img src="images/09.jpg" alt="">
  40. </div>
  41. <div class="item">
  42. <img src="images/10.jpg" alt="">
  43. </div>
  44. <div class="item">
  45. <img src="images/11.jpg" alt="">
  46. </div>
  47. <div class="item">
  48. <img src="images/12.jpg" alt="">
  49. </div>
  50. </div>
  51. <script>
  52. /* 1.一排能放置几张图片 */
  53. window.onload=function(){
  54. var ww=$(window).width();
  55. var itemWidth=$(".item").outerWidth()
  56. console.log(itemWidth)
  57. var num=Math.floor(ww/itemWidth)
  58. console.log(num)
  59. /* 2.将第一排的高度添加到一个数组中 */
  60. var heightArr=[];
  61. $(".item").each((index,item)=>{
  62. if(index<num){
  63. var item=$(item).outerHeight()
  64. heightArr.push(item)
  65. }else{
  66. /* 3.从数组高度最小的地方添加图片 */
  67. var minHeight=Math.min(...heightArr); //最小高度
  68. console.log(minHeight)
  69. var minIndex=heightArr.indexOf(minHeight);
  70. var offsetLeft=$(".item").eq(minIndex).offset().left; //最小高度的item距离左边的偏移量
  71. $(".item").eq(index).css({position:'absolute',top:minHeight,left:offsetLeft})
  72. }
  73. /* 4.重新设置数组的最小高度 */
  74. var height=$(".item").eq(index).outerHeight();
  75. heightArr[minIndex]=minHeight+height;
  76. })
  77. }
  78. </script>

判断是否到达底部

  1. function onReachBottom() {
  2. var sh = $(window).scrollTop();
  3. var wh = $(window).height();
  4. var dh = $(document).height();
  5. return Math.ceil(sh + wh) == dh ? true : false;
  6. }

加载更多

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
  9. <script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.js"></script>
  10. <script src="https://unpkg.com/imagesloaded@4/imagesloaded.pkgd.js"></script>
  11. <style>
  12. * {
  13. margin: 0;
  14. padding: 0
  15. }
  16. .grid-item img {
  17. width: 200px;
  18. padding: 5px;
  19. }
  20. .grid-item {
  21. float: left;
  22. border: 1px solid #eee;
  23. border-radius: 5px;
  24. }
  25. .grid {
  26. width: 80%;
  27. margin-left: auto;
  28. margin-right: auto;
  29. }
  30. .more {
  31. position: fixed;
  32. bottom:5%;
  33. left:50%;
  34. z-index: 100;
  35. text-align: center;
  36. color:red;
  37. }
  38. </style>
  39. </head>
  40. <body>
  41. <div class="grid">
  42. <p class="more">加载更多数据</p>
  43. </div>
  44. </div>
  45. <script>
  46. var url = 'http://yapi.demo.qunar.com/mock/66515/images'
  47. /* init data */
  48. loadMore();
  49. $(window).scroll(function(){
  50. if(isReachBottom()){
  51. loadMore()
  52. }
  53. })
  54. function http(url) {
  55. return $.ajax({
  56. url,
  57. type: 'get',
  58. dataType: 'json',
  59. beforeSend() {
  60. $(".more").show()
  61. }
  62. })
  63. }
  64. function handleData(res) {
  65. var html = ""
  66. $.each(res, (index, item) => {
  67. html += `<div class="grid-item"><img src='${item.imgUrl}' /></div>`;
  68. })
  69. $('.grid').append(html); //加载你的ajax数据到列表
  70. var $grid = $('.grid').masonry({
  71. itemSelector: '.grid-item',
  72. gutter: 10,
  73. isAnimated: true
  74. });
  75. $grid.imagesLoaded().progress(function () {
  76. $grid.masonry('reloadItems'); //初始化
  77. $grid.masonry('layout'); //重新布局
  78. });
  79. $('.more').hide()
  80. }
  81. function loadMore() {
  82. http(url).then(res => {
  83. handleData(res)
  84. })
  85. }
  86. function isReachBottom() {
  87. var dh = $(document).height();
  88. var wh = $(window).height();
  89. var sw = $(window).scrollTop();
  90. return (Math.ceil(wh + sw) == dh) ? true : false;
  91. }
  92. </script>
  93. </body>
  94. </html>