vue实现瀑布流
<template>
<div id="app">
<ul>
<li
ref='waterfallItem'
v-for="(item,index) in waterfallArr"
:key="index"
>
<img :src="item.img"> 第{{index+1}}张
<span>原价 {{item.price}}</span>
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
waterfallArr: [
{
id: 1,
img: require("./assets/images/1.jpg"),
price: "50",
},
{
id: 2,
img: require("./assets/images/2.jpg"),
price: "50",
},
{
id: 3,
img: require("./assets/images/3.jpg"),
price: "50",
},
{
id: 4,
img: require("./assets/images/4.jpg"),
price: "50",
},
{
id: 5,
img: require("./assets/images/5.jpg"),
price: "50",
},
{
id: 6,
img: require("./assets/images/6.jpg"),
price: "50",
},
{
id: 7,
img: require("./assets/images/5.jpg"),
price: "50",
},
{
id: 8,
img: require("./assets/images/6.jpg"),
price: "50",
},
],
array: [] //定义空数组存储元素高度
};
},
mounted() {
setTimeout(() => { // 防止图片高度没有加载出来
this.getWaterfall();
},100)
},
methods: {
getWaterfall() {
let columns = 2; //定义布局的列数为2
let item = this.$refs.waterfallItem; //获取每个子元素的DOM
console.log("item",item)
for (let i = 0; i < item.length; i++) {
//遍历整个子元素的DOM集合
if (i < columns) {
//小于columns的子元素作为第一行
item[i].style.top = 20 + 'px';
item[i].style.left = item[0].clientWidth * i + "px";
console.log("offsetWidth", item[0].clientHeight)
this.array.push(item[i].clientHeight); //遍历结束时,数组this.array保存的是第一行子元素的元素高度
console.log("this.array",this.array)
} else {
//大于等于columns的子元素将作其他行
let minHeight = Math.min(...this.array); // 找到第一列的最小高度
let index = this.array.findIndex(item => item === minHeight) // 找到最小高度的索引
//设置当前子元素项的位置
item[i].style.top = this.array[index] +25+ "px";
item[i].style.left = item[index].offsetLeft + "px";
//重新定义数组最小项的高度 进行累加
this.array[index]+= item[i].clientHeight
console.log("this.array[index]",this.array[index])
}
}
},
},
};
</script>
<style lang="scss" scoped>
#app {
width: 750px;
height: 100vh;
background-color: #0f0;
color: #333;
text-align: center;
font-size: 20px;
ul {
width: 750px;
height: 100%;
list-style: none;
box-sizing: border-box;
background-color: #fff;
overflow: hidden;
li {
width: 50%;
height: auto;
padding: 10px;
font-size: 14px;
position: absolute;
box-sizing: border-box;
margin: 0 0 10px 0;
overflow: hidden;
img {
width: 100%;
display: block;
height: auto;
}
span {
text-decoration: line-through;
line-height: 2;
margin-left: 10px;
}
}
}
}
</style>
vue实现瀑布流的更多相关文章
- vue-waterfall2 基于Vue.js 瀑布流组件
vue-waterfall2 1.宽度自适应,数据绑定特效(适用于上拉加载更多) 2.自定义程度高 3.使用极为简便,适用于PC/移动端 4.提供resize(强制刷新布局-适用于下拉刷新)/mix( ...
- 自己实现vue瀑布流组件,含详细注释
我知道vue有瀑布流插件vue-waterfall-easy,但是使用的时候与我的预期有部分别,所以就自己动手写了这个组件 人和动物的根本区别是是否会使用工具,我们不仅要会使用,还要会创造工具,别人提 ...
- vue.js实现瀑布流之vue-waterfall-easy
想必大家应该很多都已经习惯了jquery的DOM操作,jquery的瀑布流实现起来也很容易. 但是,随着时代的发展,随着时代的进步..... 算了算了,扯远了,既然能找到这儿来,肯定是在vue.js上 ...
- 使用vue做移动端瀑布流分页
讲到瀑布流分页有一个方法一定是要用到的 pullToRefresh() 这个也没什么好解释的,想了解的可以去百度一下 下面上代码 <div id="main" class=& ...
- 用vue.js写的一个瀑布流的组件
用vue.js写的一个瀑布流的组件:https://segmentfault.com/a/1190000010741319 https://www.jianshu.com/p/db3cadc03402
- vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多
一.思路分析和效果图 用vue来实现一个瀑布流效果,加载网络图片,同时有下拉刷新和上拉加载更多功能效果.然后针对这几个效果的实现,捋下思路: 根据加载数据的顺序,依次追加标签展示效果: 选择哪种方式实 ...
- 分享一个Vue实现图片水平瀑布流的插件
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.需求来源 今天碰到了一个需求,需要在页面里,用水平瀑布流的方式,将一些图片进行加载,这让我突然想起我很久以前写的一篇文章<JS两 ...
- vue 瀑布流实现
<div class="myWrite" v-if="list.length==0"> - 这个福宝有点懒哦 - </div> < ...
- vue2.0的瀑布流组件-使用说明
做一个小项目,需要瀑布流,就选他了,先看看效果 使用瀑布流布局组件:vue-waterfall-easy 下载引入: 方式一:直接从git上复制组件的完整代码,引入vue组件文件即可 import v ...
- vuejs和webpack项目(VueComponent)初尝试——瀑布流组件
碎碎念: 好久不见,最近自己有些懈怠没更过多少博,主要原因之一是对自己学习方式的一些思考,翻看之前的博客多是记录学习笔记这反映出了自己对于前端还停留在学习-复习知识点的阶段压根没多少实践经验啊 ...
随机推荐
- apt install protobuf
protobuf介绍:https://www.cnblogs.com/niuben/p/14212711.html protobuf利用源码编译安装已经看到过很多方法,这里总结下用apt安装的方法. ...
- kali之pip和pip3安装
安装pip 首先安装setuptools,setuptools是 Python Enterprise Application Kit(PEAK)的一个副项目,它 是一组Python的 distutil ...
- C#开发的线程池和管理器 - 开源研究系列文章
上次编写了一个小软件,用于练手及自己的一个小工具集合.今天把其中的线程池和管理器的代码抽取出来,写成一个博文,让需要的朋友能够进行学习和应用. 这个线程管理器包括了3个类库和一个应用程序,见下图: 第 ...
- [OpenCV实战]40 计算机视觉工具对比
文章目录 1 简介 2 适用于计算机视觉的MATLAB 2.1 为什么要使用MATLAB进行计算机视觉:优点 2.2 为什么不应该将MATLAB用于计算机视觉:缺点 3 适用于计算机视觉的OpenCV ...
- 一问读懂Web3 架构
最近看了一些Web3.0的文章,总结了一些个人的理解: Web3.0 通过区块链基础设施管理用户数据,重构用户和互联网平台之间的关系和交互,重新定义了互联网应用的架构方式和交互模式. Web 1.0 ...
- python之路32 网络并发线程方法 线程池 协程
多进程实现TCP服务端并发 服务端: import socket from multiprocessing import Process def get_server(): server = sock ...
- 8. 字符串转整数 (atoi)
题目 代码 class Solution { public: int myAtoi(string str) { int res=0,sign=1; int i=str.find_first_not_o ...
- P5380 [THUPC2019]鸭棋
题面 查看题面 题目背景 鸭棋是一种风靡鸭子界的棋类游戏.事实上,它与中国象棋有一些相似之处,但规则不尽相同.在这里,我们将为你介绍鸭棋的规则. 鸭棋在一个 \(10\times 9\)(\(10\) ...
- 数论专项复习(一)扩展欧几里得算法(exgcd)
简介 扩展欧几里得算法(简称扩欧,exgcd),用来求下列方程的一组解: \[ax+by=(a,b) \] 算法介绍 1. 裴蜀定理 裴蜀定理(Bézout's lemma):若 \(a\in \ma ...
- YMOI 2019.6.15
题解 YMOI 2019.6.15 前记 NOIP信心个蛋赛,被各路大佬吊打,信心-- 耻辱墙: \(2019.6.15\) \(rank\) \(\color{red}{3}\) T1 简单队列 题 ...