基于Vue3 JS setup语法糖的万金油前端瀑布流

234 阅读1分钟

基于Vue3 JS setup语法糖的万金油前端瀑布流

前言:

我们在许多应用上都使用了瀑布流布局。那什么是瀑布流布局呢(waterfull)?瀑布流布局我认为是一种高度不对齐的网格形式(个人理解)。今天则介绍一下如何通过js来实现瀑布流布局。

实现效果

瀑布流实现效果.png

实现原理:

一、放置两个个div框(以两列的瀑布流布局为例,具体看实现代码)

        <div style="display: flex;flex-direction: row;margin-top: 10px;">
            <div style="width: 10%;height: 300px;margin-left: 10px;">
                <div v-for="item in list1" :key="item" style="text-align: center;border: 1px solid black;margin-top: 3px" :style="{height:Math.floor(Math.random()*200) + 'px'}">{{ item }}</div>
            </div>
            <div style="width: 10%;height: 300px;margin-left: 2px;">
                <div v-for="item in list2" :key="item" style="text-align: center;border: 1px solid black;margin-top: 3px;" :style="{height:Math.floor(Math.random()*200) + 'px'}">{{ item }}</div>
            </div>
        </div>

二、处理数据(我这里以静态数据为例,与后端数据处理形式相同,具体实现看代码)。

const list = ["1","2","3","4","5","6"];
const list1 = ref([]);
const list2 = ref([]);
for(let i = 0; i < list.length; i ++){
    if(i % 2 == 0){
        list1.value.push(list[i])
    }else if(i % 2 == 1){
        list2.value.push(list[i])
    }
}

上述代码中主要用到了求余的思想,将数据分别存于两个数组中。以上就是实现的具体方法,有什么错误和不懂的地方可以在评论区指出。