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 相关文章推荐
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
Aug 30 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
Oct 14 Javascript
微信小程序 Storage API实例详解
Oct 02 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
Dec 20 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
Mar 05 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 Javascript
基于vue实现一个禅道主页拖拽效果
May 27 Javascript
layui table 表格上添加日期控件的两种方法
Sep 28 Javascript
基于jQuery实现挂号平台首页源码
Jan 06 jQuery
Element Dropdown下拉菜单的使用方法
Jul 26 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
Aug 17 Javascript
利用js canvas实现五子棋游戏
Oct 11 Javascript
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
php下封装较好的数字分页方法
2010/11/23 PHP
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
用jscript实现新建word文档
2007/06/15 Javascript
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
浅析jQuery中常用的元素查找方法总结
2013/07/04 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
JQuery获取或设置ckeditor的数据(示例代码)
2013/11/15 Javascript
js实现日期级联效果
2014/01/23 Javascript
button没写type=button会导致点击时提交
2014/03/06 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
如何利用node转发请求详解
2020/09/17 Javascript
[01:42]TI4西雅图DOTA2前线报道 第一顿早饭哦
2014/07/08 DOTA
[54:54]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python避免死锁方法实例分析
2015/06/04 Python
对python列表里的字典元素去重方法详解
2019/01/21 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
商务助理岗位职责
2013/11/13 职场文书
关于随地扔垃圾的检讨书
2014/09/30 职场文书
采购内勤岗位职责
2015/04/13 职场文书
2016年乡镇综治宣传月活动总结
2016/03/16 职场文书
实操Python爬取觅知网素材图片示例
2021/11/27 Python
全网非常详细的pytest配置文件
2022/07/15 Python