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 继承实现例子
Aug 12 Javascript
jQuery EasyUI API 中文文档 - Panel面板
Sep 30 Javascript
jquery ajax同步异步的执行最终解决方案
Apr 26 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
Oct 24 Javascript
javascript常用的方法分享
Jul 01 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
JQuery EasyUI学习教程之datagrid 添加、修改、删除操作
Jul 09 Javascript
Google 地图类型详解及示例代码
Aug 06 Javascript
vue实现百度语音合成的实例讲解
Oct 14 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
Feb 14 Javascript
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 jQuery
vue-列表下详情的展开与折叠案例
Jul 28 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中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
php生成mysql的数据字典
2016/07/07 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
2017/02/28 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
漂亮的thinkphp 跳转页封装示例
2019/10/16 PHP
用JS实现的一个include函数
2007/07/21 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
Js实现自定义右键行为
2015/03/26 Javascript
XML、HTML、CSS与JS的区别整理
2016/02/18 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
[41:11]完美世界DOTA2联赛PWL S2 Inki vs Magma 第一场 11.22
2020/11/24 DOTA
Python模块结构与布局操作方法实例分析
2017/07/24 Python
python字符串的方法与操作大全
2018/01/30 Python
python3实现随机数
2018/06/25 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
为什么Python中没有&quot;a++&quot;这种写法
2018/11/27 Python
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
Python学习之os模块及用法
2020/06/03 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
惊艳的手工时装首饰:Migonne Gavigan
2018/02/23 全球购物
美国转售二手商品的电子商务平台:BLINQ
2018/12/13 全球购物
Looking4Parking美国:全球排名第一的机场停车比较品牌
2019/08/26 全球购物
领导失职检讨书
2014/02/24 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
pycharm安装深度学习pytorch的d2l包失败问题解决
2022/03/25 Python