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 相关文章推荐
ajax与302响应代码测试
Oct 23 Javascript
jquery中get和post的简单实例
Feb 04 Javascript
js+html5实现canvas绘制圆形图案的方法
Jun 05 Javascript
全面解析Bootstrap中form、navbar的使用方法
May 30 Javascript
jQuery包裹节点用法完整示例
Sep 13 Javascript
Yarn的安装与使用详细介绍
Oct 25 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
Mar 08 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
Mar 08 Javascript
easyui下拉框动态级联加载的示例代码
Nov 29 Javascript
mpvue 项目初始化及实现授权登录的实现方法
Jul 20 Javascript
Vue.js使用axios动态获取response里的data数据操作
Sep 08 Javascript
详解JavaScript 高阶函数
Sep 14 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实现百度网盘图片直链的代码分享
2012/11/01 PHP
destoon出现验证码不显示时的紧急处理方法
2014/08/22 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
js实现iframe动态调整高度的代码
2008/01/06 Javascript
js option删除代码集合
2008/11/12 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
用JS做的简单的可折叠的两级树形菜单
2013/09/21 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
vue实现todolist单页面应用
2017/04/11 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
利用javascript如何随机生成一定位数的密码
2017/09/22 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
JS常见构造模式实例对比分析
2018/08/27 Javascript
jQuery中each和js中forEach的区别分析
2019/02/27 jQuery
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
python生成随机验证码(中文验证码)示例
2014/04/03 Python
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
tensorflow 只恢复部分模型参数的实例
2020/01/06 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
Python __slots__的使用方法
2020/11/15 Python
HTML5 Canvas 起步(2) - 路径
2009/05/12 HTML / CSS
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
全球最大的在线橄榄球商店:Lovell Rugby
2018/05/20 全球购物
企业内控岗位的职责
2014/02/07 职场文书
2014年健康教育实施方案
2014/02/17 职场文书
2015年党员承诺书
2015/01/21 职场文书
导游词之日本富士山
2020/01/06 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python