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 相关文章推荐
js检测客户端不是firefox则提示下载
Apr 07 Javascript
JS随机生成不重复数据的实例方法
Jul 17 Javascript
JavaScript中join()方法的使用简介
Jun 09 Javascript
js动态生成Html元素实现Post操作(createElement)
Sep 14 Javascript
JavaScript仿商城实现图片广告轮播实例代码
Feb 06 Javascript
JS清除字符串中重复值的实现方法
Aug 03 Javascript
纯javascript版日历控件
Nov 24 Javascript
使用nvm管理不同版本的node与npm的方法
Oct 31 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
Jun 27 Javascript
解决vue keep-alive 数据更新的问题
Sep 21 Javascript
vue  elementUI 表单嵌套验证的实例代码
Nov 06 Javascript
javascript自定义加载loading效果
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文件服务实现虚拟挂载其他目录示例
2014/04/17 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
ExtJS下grid的一些属性说明
2009/12/13 Javascript
jQuery中append、insertBefore、after与insertAfter的简单用法与注意事项
2020/04/04 Javascript
js三种排序算法分享
2012/08/16 Javascript
在js文件中如何获取basePath处理js路径问题
2013/07/10 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
微信小程序 图片上传实例详解
2017/05/05 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
vue axios post发送复杂对象问题
2019/06/04 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
bat和python批量重命名文件的实现代码
2016/05/19 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
如何用python写一个简单的词法分析器
2018/12/18 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
2019/08/10 Python
python能在浏览器能运行吗
2020/06/17 Python
基于pytorch中的Sequential用法说明
2020/06/24 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
玩具反斗城天猫官方旗舰店:享誉全球的玩具店
2017/10/10 全球购物
公关关系专员的自我评价分享
2013/11/20 职场文书
医院实习接收函
2014/01/12 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
初中升旗仪式演讲稿
2014/05/08 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
为自己工作观后感
2015/06/11 职场文书
优质护理心得体会
2016/01/22 职场文书
MSSQL基本语法操作
2022/04/11 SQL Server
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers