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 相关文章推荐
建立良好体验度的Web注册系统ajax
Jul 09 Javascript
javascript 用原型继承来实现对象系统
Mar 22 Javascript
JS获取网页属性包括宽、高等等
Apr 03 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
Apr 07 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
May 30 Javascript
关于Javascript中document.cookie的使用
Mar 08 Javascript
解决ztree搜索中多级菜单展示不全问题
Jul 05 Javascript
vue-cli单页应用改成多页应用配置详解
Jul 14 Javascript
仿淘宝JSsearch搜索下拉深度用法
Jan 15 Javascript
JS实现基于拖拽改变物体大小的方法
Jan 23 Javascript
angularjs 的数据绑定实现原理
Jul 02 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
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 操作文件的一些FAQ总结
2009/02/12 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
PHP7修改的函数
2021/03/09 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
javascript 闭包详解
2015/02/15 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
p5.js实现简单货车运动动画
2019/10/23 Javascript
vue-socket.io接收不到数据问题的解决方法
2020/05/13 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
[57:53]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#3OG VS VP
2016/03/03 DOTA
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python实现全角半角转换的方法
2014/08/18 Python
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
Python字符串和字典相关操作的实例详解
2017/09/23 Python
Python做智能家居温湿度报警系统
2018/09/25 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
简单了解python变量的作用域
2019/07/30 Python
python 公共方法汇总解析
2019/09/16 Python
HTML5 Canvas实现玫瑰曲线和心形图案的代码实例
2014/04/10 HTML / CSS
英国工具中心:UK Tool Centre
2017/07/10 全球购物
斯德哥尔摩通票:Stockholm Pass
2018/01/09 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
大学生个人简历自我评价
2013/11/16 职场文书
高中毕业生自我鉴定例文
2013/12/29 职场文书
办公室人员先进事迹
2014/01/27 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
2014年优秀班主任工作总结
2014/12/16 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
常用的Python代码调试工具总结
2021/06/23 Python