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 相关文章推荐
Hutia 的 JS 代码集
Oct 24 Javascript
jQuery News Ticker 基于jQuery的即时新闻行情展示插件
Nov 05 Javascript
JavaScript中逗号运算符介绍及使用示例
Mar 13 Javascript
使用jQuery获取data-的自定义属性
Nov 10 Javascript
Javascript中作用域的详细介绍
Oct 06 Javascript
读Javascript高性能编程重点笔记
Dec 21 Javascript
微信小程序之MaterialDesign--input组件详解
Feb 15 Javascript
js实现简单的选项卡效果
Feb 23 Javascript
详解webpack+angular2开发环境搭建
Jun 28 Javascript
利用express启动一个server服务的方法
Sep 17 Javascript
JS获取数组中出现次数最多及第二多元素的方法
Oct 27 Javascript
vue-cli webpack 引入swiper的操作方法
Sep 15 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中base_convert()进制数字转换函数实例
2014/11/20 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
Jquery中的$.each获取各种返回类型数据的使用方法
2015/05/03 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
jQuery实现一个简单的轮播图
2017/02/19 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
详解Python字典小结
2018/10/20 Python
python对绑定事件的鼠标、按键的判断实例
2019/07/17 Python
Python验证码截取识别代码实例
2020/05/16 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
伦敦眼门票在线预订:London Eye
2018/05/31 全球购物
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
金融专业应届生求职信
2013/11/02 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
关于读书的演讲稿
2014/05/07 职场文书
活动总结书
2014/05/08 职场文书
2014年办公室个人工作总结
2014/11/12 职场文书
党员公开承诺书2015
2015/01/21 职场文书
工商行政处罚决定书
2015/06/24 职场文书
旅行社计调工作总结
2015/08/12 职场文书
Pytorch数据读取之Dataset和DataLoader知识总结
2021/05/23 Python
Nginx配置Https安全认证的实现
2021/05/26 Servers
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技