【原生js】好玩的瀑布流

   日期:2020-09-21     浏览:101    评论:0    
核心提示:内容原生的瀑布流思路分析以及具体实现屡屡思路①:何为瀑布流:②:需求:图片不变形、展示区域不留白③:需求分析:图片都遵循等宽不等高的样式注意:第一排图片可不做处理(让css 操作其样式),从第二排开始,每张图片都需要遍历追加,追加的位置是每一次高度最低的位置(凹陷处。示例实现js 代码块(保姆级注释)window.addEventListener('load', () => { var boxWidth = document.querySelector('.box')

内容

原生的瀑布流思路分析以及具体实现

屡屡思路

①:何为瀑布流:

②:需求:图片不变形、展示区域不留白
③:需求分析:图片都遵循等宽不等高的样式

注意:第一排图片可不做处理(让css 操作其样式),从第二排开始,每张图片都需要遍历追加,追加的位置是每一次高度最低的位置(凹陷处

示例实现

js 代码块(保姆级注释)

window.addEventListener('load', () => { 
    var boxWidth = document.querySelector('.box').offsetWidth; // # 求出一个盒子的宽度(offsetWidth 返回值包括 padding)
    var containerWidth = document.querySelector('.container').offsetWidth; // # 求出父容器的宽度
    var col = parseInt(containerWidth / boxWidth) //# 求出一排有几列
    var boxs = document.querySelectorAll('.box'); //# 拿到所有的盒子,优化计算
    var heightArr = []; //# 定义空数组,来装每一排图片的高度
    boxs.forEach((item, index) => {  //# 遍历所有盒子
        if (index < col) { 
            heightArr[index] = item.offsetHeight; //# 如果是第一排,直接排序(不定位),且每一次循环把图片高度装入数组
        } else { 
            var minHeightBox = Math.min(...heightArr); //# 求出一排中最小高度的图片(每次追加图片至最小高度下)
            var minHeightIndex = heightArr.findIndex(item => item == minHeightBox); //# 找出最小高度图片的索引
            item.style.position = 'absolute'; //# 从第二排起,每张图片都要定位追加
            item.style.top = minHeightBox + 'px'; //# 距顶部等于最小图片的高度
            item.style.left = minHeightIndex * boxWidth + 'px'; // # 距左侧等于最小图片的索引 * 每个盒子的宽度(切记盒子等宽不等高)
            heightArr[minHeightIndex] += item.offsetHeight; //# 图片加入后,把其高度追加入数组。确保后续追加
        }
    })
})

对于css 演示,自愧丑的不行,就不展示了哈。

小技巧:扣代码时可以打印出浏览器窗口的实时大小,方便计算。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服