vue实现简单瀑布流布局


Posted in Javascript onMay 28, 2020

vue简单实现瀑布流布局的一种方式(vue瀑布流组件),供大家参考,具体内容如下

vue中的瀑布流布局组件

需求:图片容器宽度固定,高度根据图片自适应,图片一行不能排列时候,换行依次从左往右排列。(瀑布流概念)

vue实现简单瀑布流布局

另外结合vue-lazy实现懒加载 ( npm i vue-lazyload --save-dev)
使用也很简单,在需要懒加载的img标签上将:src换成v-lazy

父组件传递数据:

waterfallData:[
 {
 e_img: "test.jpg",
 // 图片
 e_intro: "描述信息",
 u_img: "test.jpeg",
 // 标记图
 u_name: "开发者"},
 {
 e_img: "test.jpg",
 e_intro: "描述信息",
 u_img: "test.jpeg",
 u_name: "开发者"}
 ]

定宽不定高瀑布流布局子组件

<template>
<div>
 <div class="waterfall px-container clearfix" v-cloak>
 <ul class="px-waterfall left" v-for="(el,i) in newWaterfallData" :key="i">
 <li v-for="(item,index) in el" :key="index">
 <div style="position: relative;" >
  <router-link to="/goodsdetail/1">
   <img v-lazy="item.e_img" class="bg-img" alt="" v-loading="true">
  </router-link>
  <div class="px-hot-tag" v-if="item.u_img">
   <img :src="item.u_img" alt="" >
  </div>
 <h3 class="font22 color-fff fh" v-if="item.e_intro"> {{item.e_intro}}</h3>
  </div>
 </li>
 </ul>
 </div>
</div>
</template>
<script>
export default {
 data() {
 return {
 newWaterfallData: '',
 waterfallDataNumber:''
 }
 },
 created() {
 let [ ...waterfallData ] = this.waterfallData
 let [ ...newWaterfallData ]= [[],[],[]]
 waterfallData.forEach((el,i) => {
 switch( i%3 ) {
 case 0 : newWaterfallData[0].push(el)
  break
 case 1: newWaterfallData[1].push(el)
  break
 case 2: newWaterfallData[2].push(el)
  break
 }
 });
 this.newWaterfallData = newWaterfallData
 },
 props: [ 'waterfallData' ]
}
</script>
<style lang="scss">
 .px-container {
 width: 100%;
 max-width: 1200px;
 margin: 0 auto;
 }
 .clearfix:before,
 .clearfix:after {
 content: "";
 display: block;
 clear: both;
 }
 .clearfix {
 zoom: 1;
 }
 .left {
 float: left;
 }
 . font22{
 font-size:22px;
 } 
 .color-fff {
 color:#fff;
 }
 .fh {
 overflow:hidden;
 }
 [v-cloak]{
 display: none!important;
 }
 .waterfall {
 margin-top: 20px;
 }
 .px-waterfall {
 width: calc(380px);
 &:nth-child(3n+2) {
 margin: 0 30px;
 }
 img.bg-img {
 border-radius: 8px;
 }
 h3 {
 text-overflow:ellipsis;
 white-space: nowrap;
 text-overflow: ellipsis;
 height:30px;
 font-family:PingFangSC-Semibold;
 font-weight:600;
 line-height:30px;
 letter-spacing:6px;
 position: absolute;
 top: 50%;
 left: 50%;
 transform: translate(-50%,-50%);
 z-index: 999;
 }
 li{
 background: #fff;
 border-radius: 8px;
 margin-bottom: 20px;
 }
 }

 .px-hot-tag {
 position: absolute;
 top: 0;
 border-radius: 8px;
 width: 71px;
 height: 30px;
 img {
 border-radius: 8px 0 8px 0;
 }
 }
 .photo{
 position: relative;
 height: 25px;
 .keywordbox {
 position: absolute;
 left: 50%;
 top: 50%;
 transform: translate(-50%,-50%);
 height: 25px;
 }
 }
 .keyword {
 height: 25px;
 line-height: 25px;
 padding: 0 22px;
 text-align: center;
 .color-666-line {
 border-bottom:2px solid #666666;
 }
 .red-line {
 border-bottom:2px solid #F65050;
 }
 }
</style>

如有问题,欢迎指正,如您有好的方案,敬请与我分享!

更多文章可以点击《Vue.js前端组件学习教程》学习阅读。

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

更多vue学习教程请阅读专题《vue实战教程》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 读取xml,写入xml 实现代码
Jul 10 Javascript
js setattribute批量设置css样式
Nov 26 Javascript
jQuery判断iframe中元素是否存在的方法
May 11 Javascript
js实现简单的星级选择器提交效果适用于评论等
Oct 18 Javascript
Jquery插件easyUi表单验证提交(示例代码)
Dec 30 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
Jan 13 Javascript
AngularJS 中的指令实践开发指南(一)
Mar 20 Javascript
jQuery制作图片旋转效果
Feb 02 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
Apr 20 Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 Javascript
JS实现在线ps功能详解
Jul 31 Javascript
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
JavaScript观察者模式原理与用法实例详解
Mar 10 #Javascript
微信小程序用canvas画图并分享
Mar 09 #Javascript
JavaScript实现简单贪吃蛇效果
Mar 09 #Javascript
原生js无缝轮播插件使用详解
Mar 09 #Javascript
微信小程序自定义弹出模态框禁止底部滚动功能
Mar 09 #Javascript
JavaScript享元模式原理与用法实例详解
Mar 09 #Javascript
JavaScript装饰者模式原理与用法实例详解
Mar 09 #Javascript
You might like
php微信公众平台配置接口开发程序
2016/09/22 PHP
利用PHP计算有多少小于当前数字的数字方法示例
2020/08/26 PHP
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
js实现网页收藏功能
2015/12/17 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
Node.js安装配置图文教程
2017/05/10 Javascript
layui前端框架之table表数据的刷新方法
2018/08/17 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
sortable+element 实现表格行拖拽的方法示例
2019/06/07 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
Python单例模式的两种实现方法
2017/08/14 Python
python 筛选数据集中列中value长度大于20的数据集方法
2018/06/14 Python
python去除拼音声调字母,替换为字母的方法
2018/11/28 Python
详解python读取和输出到txt
2019/03/29 Python
Pytorch抽取网络层的Feature Map(Vgg)实例
2019/08/20 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
美国牛仔品牌:True Religion
2018/11/16 全球购物
Halston Heritage官网:简洁的日装,稍显奢华的晚装
2018/11/20 全球购物
软件测试面试题
2015/10/21 面试题
自我评价如何写好?
2014/01/05 职场文书
安全标准化汇报材料
2014/02/03 职场文书
家长对孩子的寄语
2015/02/26 职场文书
2016年国陪研修感言
2015/11/18 职场文书
JS数组的常用方法整理
2021/03/31 Javascript
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android