一个超详细vue无限滚动vue-infinite-scroll插件的配置及使用详解
开发中总会遇到这种下拉加载的设计方案,Vue实现下拉加载最佳方案自然是使用vue-infinite-scroll来实现。接下来我们一起看下它的配置及使用方式。
首先我们先了解下他的配置参数:
v-infinite-scroll="loadMore"表示回调函数是loadMore infinite-scroll-disabled="busy"表示由变量busy决定是否执行loadMore,false则执行loadMore,true则不执行,注意,busy表示繁忙,繁忙的时候是不执行的。 infinite-scroll-distance="10"这里10决定了页面滚动到离页尾多少像素的时候触发回调函数,10是像素值。一般情况下会在页尾做一个几十像素高的“正在加载中...”,这样的话,可以把这个div的高度设为infinite-scroll-distance的值即可。infinite-scroll-immediate-check 默认值为true,该指令表示,应该在绑定后立即检查busy的值和是否滚动到底。假如你的初始内容高度不够,不足以填满可滚动的容器的话,你应设为true,这样会立即执行一次loadMore,会帮你填充一些初始内容。 infinite-scroll-listen-for-event 当事件在Vue实例中发出时,无限滚动将再次检查。 infinite-scroll-throttle-delay 检查busy的值的时间间隔,默认值是200,因为vue-infinite-scroll的基础原理是,vue-infinite-scroll会循环检查busy的值,以及是否滚动到底,只有当:busy为false且滚动到底,回调函数才会执行安装vue-infinite-scroll
npm install vue-infinite-scroll --save在Vue项目中引入 vue-infinite-scroll
你可以选择全局引入:
import infiniteScroll from 'vue-infinite-scroll'Vue.use(infiniteScroll)或者在单个组件中使用:
import infiniteScroll from 'vue-infinite-scroll'export default { directives: { infiniteScroll }}在实际开发组件中的调用
js部分:
为了便于测试可以使用官网案例进行演示:
<div v-infinite-scroll="loadMore" infinite-scroll-throttle-delay="500" infinite-scroll-disabled="busy" infinite-scroll-distance="10"> <div v-for="item in data" :key="item.index">{{item.name}}</div></div>data () { return { count: 0, data: [], busy: false } },methods: { loadMore: function() { this.busy = true setTimeout(() => { for (var i = 0, j = 10; i < j; i++) { this.data.push({name: this.count++ }) } console.log(this.data) this.busy = false }, 1000) } }注意:
如果要用数据对容器进行填充,那么必须设置容器高度 也可以是屏幕高度,不然无法触发loadMore事件在进行异步请求之前,需要调用this.busy= true, 数据请求完成后 再设置 this.busy = false(放在axios请求的外面,避免不断重复加载的现象)
近日,佳能7500万像素EOSR无反相机再次被知情人爆料,据介绍新版EOSR将搭载全新传感器,充分发挥优秀的RF镜头优势将高像素高画质推至高峰,并且已经有部分摄影师拿到工程样机进行测试。
据早前媒体报道本次新款EOSR还具备双卡槽设计、新增背部机身摇杆、新增传感器防抖与镜头防抖技术,共同组成“全光学IS”系统,从而提供更好的画面防抖效果,由于本次佳能采用全新的CMOS传感器设计,大家诟病的宽容度问题希望可以得到解决。虽然这台相机目前看性能应该非常优秀,但机身价格预计也是非常华丽,另外支持这台相机背后的设备也会变相升级,又是一笔不小的费用。
从另外一个角度去看佳能整体业务确实偏向于微单更多,目前佳能全部精力投入在RF镜头的开发,新版EOSR技术攻坚。
专业单反业务目前仅仅依靠2016年发布的5DIV在勉强支撑,随着2020年的到来佳能最后一款专业级单反1DX markIII发布,将为单反时代画上句号!
一、为什么是velocity不是jquery
时下,如何快速制作js动效,许多人可能会首先想到使用jquery。jquery的就是如此流行。使用jquery制作的各种动效在网络上也非常丰富。jquery的优点不言而喻,简单易用,高效开发。但要知道jquery动画性能并不是最优的。因为jquery想要实现的目标太多,动画性能上就不可避免做出妥协。因此要制作高性能js动画,可能不得不放弃jquery,转而使用原生js制作动画。那有没有一种js高性能动效库,既像jquery一样简单易用,动画又高性能?这就是velocity.js动画库了。
二、velocity的优点
1、Velocity 是一个简单易用、高性能、功能丰富的轻量级JS动画库。它能和 jQuery 完美协作,并和$.animate()有相同的 API,但它不依赖 jQuery,可单独使用。 Velocity 不仅包含了 $.animate() 的全部功能, 还拥有:颜色动画、转换动画(transforms)、循环、 缓动、SVG 动画、和 滚动动画 等特色功能。2.也有几十种类似animate.css的预定义动画api3.支持自定义动效,拼装队列动效等等4.动画回调 比如 Begin & Complete & Progress 回调函数
三、velocity的使用
1、velocity的引入
可以使用script标签引入
<script src="../lib/velocity.min.js"></script>
也可以通过npm安装
npm install velocity-animate
2、Velocity语法
Velocity使用和jquery相同的语法。换句话说,如果你熟悉jquery的animate()函数,那么你只需把animate()语法套用在velocity()就行。
Jquery:
$(选择器).animate();
Velocity:
$(选择器).velocity();
Velocity参数用法
$element.velocity({
width: "500px", // 动画属性 宽度到 "500px" 的动画
property2: value2 // 属性示例
}, {
/* Velocity 动画配置项的默认值 */
duration: 400, // 动画执行时间
easing: "swing", // 缓动效果
queue: "", // 队列
begin: undefined, // 动画开始时的回调函数
progress: undefined, // 动画执行中的回调函数(该函数会随着动画执行被不断触发)
complete: undefined, // 动画结束时的回调函数
display: undefined, // 动画结束时设置元素的 css display 属性
visibility: undefined, // 动画结束时设置元素的 css visibility 属性
loop: false, // 循环
delay: false, // 延迟
mobileHA: true // 移动端硬件加速(默认开启)
});
简单点就是:
$element.velocity(
{css参数列表},
{动画配置项}
)
其他写法:
$element.velocity({css参数列表 }, dalay延迟,easing缓动效果, function回调函数);
示例:
$element.velocity({ width: "50px" }, 1000);
$element.velocity({ width: "50px" }, 1000, "swing");
$element.velocity({ width: "50px" }, "swing");
$element.velocity({ width: "50px" }, 1000, function() {});
这里特别讲解一个非常有趣的用法,就是动画效果原路返回。如果我们做了一个比较炫酷或者比较复杂的动画效果,然后需要制作动画原路返回的效果,只需如此:
$element.velocity("reverse");
Velocity作者做出的说明是,velocity会自动记录下动画执行的路径、时间以及效果等,然后会按动画原效果返回。也就是说,不管你动画效果设计得再复杂,如果要动画原路返回,只需一句代码,是不是很酷?继续关注源码时代,更多技术文。
声明:本文来源于网络,如有侵权请联系客服删除