前言:
使用JavaScript,主要是用于完成一些页面上的特效,今天就带领大家一起,封装一个简单的函数。写好了之后,完全可以存起来,今后各种调用就好。
原理:
- 根据传入的位置(target),使对象(obj),按一定的速度(speed)去改变自 己的样式(attr),当该函数(move)执行完毕之后,调用回调函(callback)。
注意:
- 为了避免多次点击造成定时器的多次调用,在每一次调用定时器之前,应该关闭 上一次的定时器。
- 定时器应该加在对象的属性中,而不是全局变量。
- 移动的速度和目标和起点之间,可能不能整除,所以要手动的让对象最后刚好在 目标位置上。
- 动画执行完毕之后,应该手动的关闭定时器。
- 回调函数是选传,需要处理没有传入的情况。
代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71/ /** * @desc:执行简单动画 * @param {Object} obj:待执行动画的元素。 * @param {String} attri:动画的元素(比如width,left) * @param {Number} target:终点值。 * @param {Number} speed:动画的执行速度。 * @param {Function} callback:动画完成之后的回调函数。 */ function move(obj, attr, target, speed, callback) { //关闭上一个定时器(定时器是加在目标对象中的,多个对象调用move函数,不会被clearInterval) clearInterval(obj.timer); //获取元素目前的位置 var current = parseInt(getStyle(obj, attr)); //判断速度的正负值 if(current > target) { //此时速度应为负值 speed = -speed; } //开启一个定时器,用来执行动画效果 //向执行动画的对象中添加一个timer属性,用来保存它自己的定时器的标识 obj.timer = setInterval(function() { //获取box1的原来的left值 var oldValue = parseInt(getStyle(obj, attr)); //在旧值的基础上增加 var newValue = oldValue + speed; //解决误差值 //向左移动时,需要判断newValue是否小于target //向右移动时,需要判断newValue是否大于target if((speed < 0 && newValue < target) || (speed > 0 && newValue > target)) { newValue = target; } //设置新值 obj.style[attr] = newValue + "px"; //当元素移动到target时,使其停止执行动画 if(newValue == target) { //达到目标,关闭定时器 clearInterval(obj.timer); //动画执行完毕,调用回调函数,根据是否传参,决定是否执行 callback && callback(); } }, 30); } /* * 定义一个函数,用来获取指定元素的当前的样式 * 参数: * obj 要获取样式的元素 * name 要获取的样式名 */ function getStyle(obj, name) { if(window.getComputedStyle) { //正常浏览器的方式,具有getComputedStyle()方法 return getComputedStyle(obj, null)[name]; } else { //IE8的方式,没有getComputedStyle()方法 return obj.currentStyle[name]; } }
有了以上代码,就可以简单的实现一个二级菜单了:
最后
以上就是大力金针菇最近收集整理的关于004_JS封装简单动画函数的全部内容,更多相关004_JS封装简单动画函数内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复