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中巧用“闭包”实现程序的暂停执行功能
Apr 04 Javascript
js插件设置innerHTML时在IE8下提示“未知运行时错误”解决方法
Apr 25 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
Sep 01 Javascript
全面解析Bootstrap手风琴效果
Apr 17 Javascript
JQuery.validate在ie8下不支持的快速解决方法
May 18 Javascript
详解A标签中href=&quot;&quot;的几种用法
Aug 20 Javascript
vue+Java后端进行调试时解决跨域问题的方式
Oct 19 Javascript
JS复杂判断的更优雅写法代码详解
Nov 07 Javascript
开发中常用的25个JavaScript单行代码(小结)
Jun 28 Javascript
Vue 使用beforeEach实现登录状态检查功能
Oct 31 Javascript
js数组的基本使用总结
Jan 18 Javascript
详解JS ES6编码规范
May 07 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
eWebEditor v3.8 商业完整版 (PHP)
2006/12/06 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
php压缩文件夹最新版
2018/07/18 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
firefox浏览器不支持innerText的解决方法
2013/08/07 Javascript
jquery插件开发之实现md5插件
2014/03/17 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
详解Vue中使用v-for语句抛出错误的解决方案
2017/05/04 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
使用Vue.set()方法实现响应式修改数组数据步骤
2019/11/09 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
Python操作MySQL数据库的方法
2018/06/20 Python
Python中的元组介绍
2019/01/28 Python
python实现高斯(Gauss)迭代法的例子
2019/11/20 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
用python-webdriver实现自动填表的示例代码
2021/01/13 Python
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
护理专业自荐书
2014/06/04 职场文书
财务会计专业求职信
2014/06/09 职场文书
企业文化口号
2014/06/12 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
股份转让协议书范本
2015/01/27 职场文书
2015年行政助理工作总结
2015/04/30 职场文书
行政处罚事先告知书
2015/07/01 职场文书