前端常用的瀑布流展示方式,可以實現動態加載,優化圖片等資源的加載和顯示。我們可以使用Vue框架來實現這個功能。Vue實現瀑布流的方式有很多,今天我們來介紹一種較為常用的方法。
我們先在HTML中建立一個div元素,設置其為瀑布流展示的容器,然后再在Vue的實例中定義一個data對象,其中包含一個數組,用來存儲瀑布流每一列的高度。我們還需要一個方法,用來接收數據并進行渲染。如下所示:
new Vue({ el: "#app", data: { columnHeight: [0, 0, 0], itemList: [ { id: 1, name: "item1", height: 200 }, { id: 2, name: "item2", height: 150 }, { id: 3, name: "item3", height: 180 }, { id: 4, name: "item4", height: 220 }, { id: 5, name: "item5", height: 160 }, { id: 6, name: "item6", height: 190 }, { id: 7, name: "item7", height: 170 }, { id: 8, name: "item8", height: 210 }, ] }, methods: { renderList() { // 渲染列表 } } }){{ item.name }}
接下來,在渲染列表的方法中,我們需要在每一列中尋找最低高度的列,并將新的數據插入其對應的列。代碼如下:
renderList() { for (let i = 0; i< this.itemList.length; i++) { const item = this.itemList[i]; const minHeight = Math.min.apply(null, this.columnHeight); // 獲取最低列的高度 const minIndex = this.columnHeight.indexOf(minHeight); // 獲取最低列的索引 this.columnHeight[minIndex] += item.height; // 增加當前列的高度 item.column = minIndex; // 添加列的標記 } }
最后,我們需要在視圖中設置列的樣式,以及在每個元素中設置列的標記。代碼如下:
.container { display: flex; } .container >div { width: calc(100% / 3); margin-right: 10px; } .container >div:last-child { margin-right: 0; } .item { height: 200px; background: #ccc; } .newItem { background: #fff; }
在html中,我們需要通過動態綁定類名的方式給元素添加所屬的列。代碼如下:
{{ item.name }}
需要注意的是,在每次添加數據之后,我們還需要判斷是否需要繼續添加。如果頁面滾動到底部,才進行下一次加載。實現的代碼如下:
mounted() { window.addEventListener("scroll", () =>{ const scrollTop = document.documentElement.scrollTop || document.body.scrollTop; const clientHeight = document.documentElement.clientHeight || document.body.clientHeight; const scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight; if (scrollTop + clientHeight >= scrollHeight - 20) { this.loadMore(); } }); }, methods: { loadMore() { // 發送請求獲取新數據 // 將新數據添加到itemList中 this.renderList(); } }
至此,我們就完成了Vue前端瀑布流的實現。希望本文對大家有所幫助。
上一篇vue前端編輯教程
下一篇c 在線json解析