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实现禁止后退的方法
Dec 27 Javascript
UI Events 用户界面事件
Jun 27 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
Aug 02 Javascript
jQuery实现CheckBox全选、全不选功能
Jan 11 Javascript
使用jQuery操作DOM的方法小结
Feb 27 Javascript
Bootstrap导航简单实现代码
Mar 06 Javascript
vue基于mint-ui的城市选择3级联动的示例
Oct 25 Javascript
AngularJS 表单验证手机号的实例(非必填)
Nov 12 Javascript
js replace 全局替换的操作方法
Jun 12 Javascript
微信小程序实现分享到朋友圈功能
Jul 19 Javascript
Element input树型下拉框的实现代码
Dec 21 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
Sep 16 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的远程图片抓取函数分享
2013/09/25 PHP
PHP递归删除多维数组中的某个值
2017/04/17 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
用javascript编写的第一人称射击游戏
2007/02/25 Javascript
javascript 必知必会之closure
2009/09/21 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
浅谈JavaScript函数节流
2014/12/09 Javascript
Bootstrap3制作搜索框样式的方法
2016/07/11 Javascript
js Canvas绘制圆形时钟教程
2017/02/06 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
微信小程序学习笔记之跳转页面、传递参数获得数据操作图文详解
2019/03/28 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
vue实现下拉菜单树
2020/10/22 Javascript
python matplotlib 注释文本箭头简单代码示例
2018/01/08 Python
答题辅助python代码实现
2018/01/16 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
python 高效去重复 支持GB级别大文件的示例代码
2018/11/08 Python
python使用pymongo操作mongo的完整步骤
2019/04/13 Python
python3 map函数和filter函数详解
2019/08/26 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
Python求正态分布曲线下面积实例
2019/11/20 Python
python使用建议与技巧分享(二)
2020/08/17 Python
HTML5 window/iframe跨域传递消息 API介绍
2013/08/26 HTML / CSS
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
LN-CC英国:伦敦时尚生活的缩影
2019/09/01 全球购物
函授自我鉴定
2013/11/06 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
材料物理专业求职信
2014/09/01 职场文书
2014年专项整治工作总结
2014/11/17 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js