vue.js组件vue-waterfall-easy实现瀑布流效果


Posted in Javascript onAugust 22, 2017

想必大家应该很多都已经习惯了jquery的DOM操作,jquery的瀑布流实现起来也很容易。

但是,随着时代的发展,随着时代的进步.....

算了算了,扯远了,既然能找到这儿来,肯定是在vue.js上已经有一定的基础了,咱们废话不多说,直接进入主题。

vue-waterfall-easy

easy! easy! easy! 重要的事情说三遍!!!

所以说,咱们今天用到的不是大家熟知的vue-waterfall,而是vue-waterfall-easy;

一、获取vue-waterfall-easy组件

这里有两种方式:

第一种就是直接从git上复制vue-waterfall-easy组件的完整代码,粘贴为自己本地项目的组件(源码链接:vue-waterfall-easy),打开链接,进入src/components/vue-waterfall-easy.vue,直接复制所有代码即可。

第二种是通过npm进行全局安装,直接用命令行在你的项目目录下执行:npm install vue-waterfall-easy --save-dev

执行成功后,在node_modules目录下会出现一个vue-waterfall-easy的目录(其实就是整个demo的实例源码)

vue.js组件vue-waterfall-easy实现瀑布流效果

二、局部引用vue-waterfall-easy组件

如果是直接复制的组件源码作为本地组件,那就直接与普通组件一样引入就可以了:

import vueWaterfallEasy from '你的路径/组件名.vue'

 如果是通过npm安装的组件,那就更简单了:

import vueWaterfallEasy from 'vue-waterfall-easy'

直接这样就可以调用到node_modules目录下打包好的vue-waterfall-easy组件了;

当然,引入组件之后一定不要忘记在当前组件中注册该组件哦:

export default {
 components: {
 vueWaterfallEasy
 } 
}

三、定义需要用到的变量及方法

data () {
 return {
 imgsArr: [], //存放所有已加载图片的数组(即当前页面会加载的所有图片)
 fetchImgsArr: [] //存放每次滚动时下一批要加载的图片的数组
 }
 },
methods: {

 initImgsArr (n, m) { //初始化图片数组的方法,把要加载的图片装入


var arr = []


for (var i = n; i < m; i++) {



arr.push({ src: `static/img/${i + 1}.jpg`, link: '', info: '一些图片描述文字' }) //src为加载的图片的地址、link为超链接的链接地址、



























 //info为自定义的图片展示信息,请根据自己的情况自行填写


}


return arr

 },


 fetchImgsData () { //获取新的图片数据的方法,用于页面滚动满足条件时调用


this.imgsArr = this.imgsArr.concat(this.fetchImgsArr) //数组拼接,把下一批要加载的图片放入所有图片的数组中

 }

},

created () {


this.imgsArr = this.initImgsArr(0, 10) //初始化第一次(即页面加载完毕时)要加载的图片数据


this.fetchImgsArr = this.initImgsArr(10, 20) // 模拟每次请求的下一批新的图片的数据数据

}

四、模版中调用组件

<vue-waterfall-easy :imgsArr="imgsArr" @scrollLoadImg="fetchImgsData"></vue-waterfall-easy>

想必大家都能看懂,这里不再赘述。如果你只是需要一个滚动无限加载的瀑布流图片展示,到这一步就已经能满足需求了。当然,看过我发的源码链接里的源码的小伙伴会发现源码中的App.vue模版中是这样引用的:

<template lang="pug"> //不要忽略这个语言属性哦
#app
 h1.title vue-waterfall-easy demo
 vue-waterfall-easy(:imgsArr="imgsArr",@scrollLoadImg="fetchImgsData")
 template( scope="props")
 p.some-info 第{{props.index+1}}张图片
 p.some-info {{props.value.info}}
 </template>
</template>

有了解过的小伙伴应该能看出来这里应用的是pug(也就是大名鼎鼎的jade,后来因为商标的原因改名为pug)的语法,至于为什么这样写,可以参见vue-waterfall-easy.vue源码的第81~90行以及github上(上面我给的链接就是)文档的参数说明:

a.img-box(
 v-for="(v,i) in imgsArrC",
 :href="v.link",
 :style="{padding:gap/2+'px',width: isMobile ? '' : colWidth+'px'}"
 )
 .img-inner-box
 div.img-wraper(:style="{width:imgWidthC+'px',height:v.height?v.height+'px':''}")
 img(:src="v.src")
 .img-info
 slot(:index="i",:value="v")

注:报pug错误的小伙伴请自行百度下载pug依赖库

参数说明

vue.js组件vue-waterfall-easy实现瀑布流效果

五、运行项目

如果以上步骤没有出现问题的话,那么恭喜你,你已经可以看到自己的瀑布流了。当然,我们可以从文档中看到,我们还可以进行一些其他的配置:

组件参数

props: {
 gap: { // 图片间隔
 type: Number,
 default: 20
 },
 maxCols: { // 最大的列数
 type: Number,
 default: 5
 },
 imgsArr: { // 请求返回的图片数据,格式:[{src:'1.jpg','link':'url1' info:'自定义图片信息'},{src:'2.jpg','link':'url2',info:'自定义图片信息'}...]
 type: Array,
 required: true
 },
 imgWidth: { // 指定图片的统一宽度
 type: Number,
 default: 240
 },
 timeOut: { // 预加载事件小于500毫秒就不显示加载动画,增加用户体验
 type: Number,
 default: 500
 }
}

按照需求自行配置就可以了。

OK,到此,我们已经按照文档成功的“构建”了我们自己瀑布流组件了。当然,实际项目中我们的需求很可能不只是这样,我们还要自己做一些完善,这里我就不再多说,相信经过以上的讲解,大家已经对vue-waterfall-easy的套路有所了解,可以自己解决如何满足项目需求的问题了。如果有什么不懂或者不知道如何完善以满足需求,可以在评论中留下你的问题或者需求,我会很乐意帮助你的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
推荐dojo学习笔记
Mar 24 Javascript
List Information About the Binary Files Used by an Application
Jun 18 Javascript
各种常用浏览器getBoundingClientRect的解析
May 21 Javascript
jquery+json实现的搜索加分页效果
Mar 31 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
jquery自适应布局的简单实例
May 28 Javascript
Node.js连接MongoDB数据库产生的问题
Feb 08 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
Mar 30 Javascript
ES6新特性一: let和const命令详解
Apr 20 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
Mar 07 Javascript
vue使用openlayers实现移动点动画
Sep 24 Javascript
vue中watch的用法汇总
Dec 28 Vue.js
Angular中响应式表单的三种更新值方法详析
Aug 22 #Javascript
jQuery插件DataTables分页开发心得体会
Aug 22 #jQuery
React学习笔记之列表渲染示例详解
Aug 22 #Javascript
bootstrap switch开关组件使用方法详解
Aug 22 #Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
Aug 22 #Javascript
jQuery实现广告条滚动效果
Aug 22 #jQuery
基于jQuery的表单填充实例
Aug 22 #jQuery
You might like
将OICQ数据转成MYSQL数据
2006/10/09 PHP
php中用文本文件做数据库的实现方法
2008/03/27 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
Maps Javascript
2007/01/22 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
jquery与js实现全选功能的区别
2017/06/11 jQuery
微信小程序组件 marquee实例详解
2017/06/23 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
基于Three.js实现360度全景图片
2018/12/30 Javascript
vue-cli脚手架打包静态资源请求出错的原因与解决
2019/06/06 Javascript
[49:21]TNC vs VG 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第三场 8.20.mp4
2019/08/22 DOTA
详解Python中的各种函数的使用
2015/05/24 Python
Python3实现Web网页图片下载
2016/01/28 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
对pandas进行数据预处理的实例讲解
2018/04/20 Python
用Python实现筛选文件脚本的方法
2018/10/27 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
python使用Matplotlib改变坐标轴的默认位置
2019/10/18 Python
wxpython绘制音频效果
2019/11/18 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
Ubuntu20.04环境安装tensorflow2的方法步骤
2021/01/29 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
人事专员的职责
2014/02/26 职场文书
2014年小学图书室工作总结
2014/12/09 职场文书