JS之运动1
今天学习了 JS 的运动,从最简单的一个 div 运动到多个 div 运动开始,到后面通过 div 的运动实现常见的侧边栏的隐藏与显示,最后还实现图片或者 div 块的淡入淡出。最终总结起来其实都是一个运动函数 startMove()的套用,涉及定时器的关与开。仔细观察下每个例子的 startMove()运动函数,会发现都是大同小异的,所以将 startMove()运动函数封装起来,当需要的时候导入,再修改下相应的参数即可,这样可以大大实现代码的简洁性。下面就是封装该函数的一个过程。
首先,获取样式表指定对象的属性值,其中涉及浏览器兼容性问题,利用 if-else 语句来解决兼容性问题。
1 | function getStyle(obj, attr) { |
然后,就是设置 startMove()函数里面包含的真正内容了,
- 设置三个参数值,分别为 obj(对象),attr(属性值),iTarget(目标值)
1 | function startMove(obj, attr, iTarget) {} |
- 设置定时器。开启一个定时器前应该先关闭定时器,因为如果没有先关闭定时器,那么当重复点击运动按钮时,会重复执行 startMove()运动函数,即一起开启多个定时器,导致运动的重复和混乱。
1 | clearInterval(obj.timer); |
- 设置定时器内部的内容。这里要注意一点,如果设置的是透明度的值,因为有可能会是小数点,所以需要用 parseFloat;反之,如果设置的是非透明度值,则用 parseInt。(iCur 的初值为 0,为所指定属性的值)
1 | if (attr == "opacity") { |
然后设置运动速度,这里设置速度值 iSpeed 为目标值与当前属性值的差再除以 8,当速度值大于 0 时,将其向上取整,否则向下取整。
1 | var iSpeed = (json[attr] - iCur) / 8; |
最后就是将指定属性的当前值与目标值做判断,等于目标值时关闭定时器,否则将属性的当前值加上速度值形成最新的值。
1 | if (iCur == iTarget) { |
到此一个运动函数搞定了,当需要导入到 html 文档时,只要添加如下命令,再修改下参数即可。
1 | <script src="move2.js"></script> |
如下面例子中,改变 oDiv1 中的 opacity 属性,使其达到 100。
1 | startMove(oDiv1,'opacity',100); |
总结下,今天主要收获是学习并一定程度掌握了 JS 的运动框架。