四、动画函数封装
4.1、动画实现原理
核心原理:通过定时器setInterval0不断移动盒子位置。
实现步骤:
1.获得盒子当前位置。
2.让盒子在当前位置加上1个移动距离。
3.利用定时器不断重复这个操作
4.加一个结束定时器的条件
5.注意:此元素需要添加定位,才能使用element.style.left
4.2、动画函数的封装
注意函数需要传递2个参数,动画对象和移动到的距离。
4.3、动画函数给不同元素记录不同定时器
如果多个元素都使用这个动画函数,每次都要var声明定时器。我们可以给不同的元素使用不同的定时器(自己专门用自己的定时器)。
核心原理:利用JS是一门动态语言,可以很方便的给当前对象添加属性。
(利用对象)
例子:
4.4、缓动动画原理
缓动动画就是让元素运动速度有所变化,最常见的是让速度慢慢停下来
思路:
1.让盒子每次移动的距离慢慢变小,速度就会慢慢落下来。
2.核心算法: (目标值 - 现在的位置) / 10 做为每次移动的距离步长(Math.ceil()往正大取整,Math.floor()负小取)。
3.停止的条件是:让当前盒子位置等于目标位置就停止定时器。
4.步长值写到定时器的里面。
例如:
4.6、动画函数添加回调函数
回调函数原理:函数可以作为一个参数。 将这个函数作为参数传到另-个函数里面,当那个函数执行完之后再执行传进去的这个函数,这个过程就叫做回调。
回调函数写的位置:定时器结束的位置。
在动画函数后面加一个参数,将此参数传一个函数进去。即为
4.7动画函数封装到单独JS文件里面
因为以后经常使用这个动画函数,可以单独封装到一个s文件里面,使用的时候引用这个JS文件即可。
4.8、节流阀
防止轮播图按钮连续点击造成播放过快。
节流阀目的:当上一个函数动画内容执行完毕,再去执行下一个函数动画,让事件无法连续触发。
核心实现思路:利用回调函数,添加一个变量来控制,锁住函数和解锁函数。
开始设置一个变量 var flag = true;
if(flag) {flag= false; do something} //关闭水龙头
利用回调函数动画执行完毕, flag= true 打开水龙头
短路运算: