原始瀑布流

  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>

所有图片

  1. <div class="content">
  2. <div class="item">
  3. <img src="images/01.jpg" alt="">
  4. </div>
  5. <div class="item">
  6. <img src="images/02.jpg" alt="">
  7. </div>
  8. <div class="item">
  9. <img src="images/03.jpg" alt="">
  10. </div>
  11. <div class="item">
  12. <img src="images/04.jpg" alt="">
  13. </div>
  14. <div class="item">
  15. <img src="images/05.jpg" alt="">
  16. </div>
  17. <div class="item">
  18. <img src="images/06.jpg" alt="">
  19. </div>
  20. <div class="item">
  21. <img src="images/07.jpg" alt="">
  22. </div>
  23. <div class="item">
  24. <img src="images/08.jpg" alt="">
  25. </div>
  26. <div class="item">
  27. <img src="images/09.jpg" alt="">
  28. </div>
  29. <div class="item">
  30. <img src="images/10.jpg" alt="">
  31. </div>
  32. <div class="item">
  33. <img src="images/11.jpg" alt="">
  34. </div>
  35. <div class="item">
  36. <img src="images/12.jpg" alt="">
  37. </div>
  38. </div>
  1. <script>
  2. /* 1.一排能放置几张图片 */
  3. window.onload=function() {
  4. var ww = $(window).width(); //窗口宽度
  5. var itemWidth = $(".item").outerWidth(); //每个item宽度,包括图片的padding,margin
  6. var num = Math.floor(ww / itemWidth); //一排可以放置的图片数
  7. console.log(num)
  8. /* 2.将第一排的高度添加到一个数组中 */
  9. var heightArr = [];
  10. $(".item").each((index,item)=>{
  11. if(index<num){
  12. var itemHeight = $(item).outerHeight() //outheight包括图片的padding
  13. heightArr.push(itemHeight)
  14. }else{
  15. /* 3.从数组高度最小的地方添加图片 */
  16. var minHeight = Math.min(...heightArr);
  17. var minIndex = heightArr.indexOf(minHeight); //高度最小图片的下标
  18. var offsetLeft = $(".item").eq(minIndex).offset().left;
  19. //offsetleft:元素距离左边边框的偏移量 图片包括图片的padding
  20. $(".item").eq(index).css({position:'absolute',top:minHeight,left:offsetLeft});
  21. /* 4.重新设置数组的最小高度 */
  22. var height = $(".item").eq(index).outerHeight();
  23. heightArr[minIndex] = minHeight+height;
  24. }
  25. })
  26. console.log(heightArr)
  27. }
  28. </script>

瀑布流下拉加载

  1. <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
  2. <script src="lib/base.js"></script>
  3. <style>
  4. * {
  5. margin: 0;
  6. padding: 0
  7. }
  8. img {
  9. width: 240px;
  10. }
  11. .item {
  12. border: 1px solid rgb(131, 130, 130);
  13. padding: 20px;
  14. float: left;
  15. }
  16. </style>

lib/base.js

  1. function onReachBottom() { //判断是否到达页面底部
  2. var dh = $(document).height();
  3. var sh = $(window).scrollTop();
  4. var wh = $(window).height();
  5. return (Math.ceil(sh + wh) == dh) ? true : false;
  6. }
  1. <script>
  2. /* 假设是从服务器取得的数据 */
  3. var url = {
  4. dataUrl: [{
  5. src: "01.jpg"
  6. }, {
  7. src: "02.jpg"
  8. }, {
  9. src: "03.jpg"
  10. }, {
  11. src: "04.jpg"
  12. }, {
  13. src: "05.jpg"
  14. }, {
  15. src: "06.jpg"
  16. }, {
  17. src: "07.jpg"
  18. }, {
  19. src: "08.jpg"
  20. }, {
  21. src: "09.jpg"
  22. }, {
  23. src: "10.jpg"
  24. }, {
  25. src: "11.jpg"
  26. }, {
  27. src: "12.jpg"
  28. }]
  29. }
  30. /* 1.一排能放置几张图片 */
  31. window.onload = function () {
  32. place_img();
  33. $(window).scroll(function(){
  34. if(onReachBottom()){
  35. url.dataUrl.forEach(item=>{
  36. let list = `<div class="item"><img src="images/${item.src}"/></div>`
  37. $(".content").append(list);
  38. place_img()
  39. })
  40. }
  41. })
  42. }
  43. function place_img() {
  44. var ww = $(window).width()
  45. var itemWidth = $(".item").outerWidth();
  46. var num = Math.floor(ww / itemWidth);
  47. /* 2.将第一排的高度放置在一个数组中 */
  48. var arrHeight = []
  49. $(".item").each((index, item) => {
  50. if (index < num) {
  51. var itemHeight = $(item).outerHeight();
  52. arrHeight.push(itemHeight)
  53. } else {
  54. /* 3.从高度最小的地方开发放置图片 */
  55. var minHeight = Math.min(...arrHeight);
  56. var minIndex = arrHeight.indexOf(minHeight);
  57. var offsetLeft = $(".item").eq(minIndex).offset().left;
  58. $(".item").eq(index).css({ position: 'absolute', top: minHeight, left: offsetLeft })
  59. /* 4.重置数组中的最小高度 */
  60. arrHeight[minIndex] = minHeight + $(".item").eq(index).outerHeight();
  61. }
  62. })
  63. }
  64. </script>