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 相关文章推荐
jquery插件 autoComboBox 下拉框
Dec 22 Javascript
JavaScript判断一个URL链接是否有效的实现方法
Oct 08 Javascript
浅谈javascript的call()、apply()、bind()的用法
Feb 21 Javascript
jQuery控制li上下循环滚动插件用法实例(附demo源码下载)
May 28 Javascript
jQuery Mobile 触摸事件实例
Jun 04 Javascript
Vue自定义弹窗指令的实现代码
Aug 13 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
Nov 26 Javascript
详解js 创建对象的几种方法
Mar 08 Javascript
微信小程序自定义组件实现环形进度条
Nov 17 Javascript
详解vue-property-decorator使用手册
Jul 29 Javascript
vue 导航内容设置选中状态样式的例子
Nov 01 Javascript
jQuery实现鼠标放置名字上显示详细内容气泡提示框效果的方法分析
Apr 04 jQuery
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中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
php 抽象类的简单应用
2011/09/06 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
vue 的keep-alive缓存功能的实现
2018/03/22 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
[01:06:43]完美世界DOTA2联赛PWL S3 PXG vs GXR 第二场 12.19
2020/12/24 DOTA
pyv8学习python和javascript变量进行交互
2013/12/04 Python
python处理圆角图片、圆形图片的例子
2014/04/25 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
python实现共轭梯度法
2019/07/03 Python
Django框架视图函数设计示例
2019/07/29 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
如何利用Python识别图片中的文字
2020/05/31 Python
Pycharm调试程序技巧小结
2020/08/08 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
2020/10/18 Python
CSS3实现同时执行倾斜和旋转的动画效果
2016/10/27 HTML / CSS
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
数据库专业英语
2012/11/30 面试题
在C#中如何实现多态
2014/07/02 面试题
浪漫婚礼主持词
2014/03/14 职场文书
妈妈活动方案
2014/08/15 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL