1 /**
2 * 使用offsetLeft,需注意margin的使用
3 * offsetLeft = margin-left + left;
4 * offsetWidth= padding + border + width;
5 *
6 * @author Lonve
7 */
8 function getStyle(elem,attr){
9 var result = null;
10 result = elem.currentStyle?elem.currentStyle[attr]:getComputedStyle(elem,false)[attr];
11 if(attr=="opacity"){
12 return parseInt(parseFloat(result)*100);
13 }
14 return parseInt(result);
15 }
16
17
18 var timer = null;
19 //匀速运动停止条件--->距离足够近
20 function offsetMove1(offset){
21 var oDiv = document.getElementById("oDiv");
22 var speed = 0;
23 speed = oDiv.offsetLeft < offset?10:-10;
24
25 clearInterval(timer);
26 timer = setInterval(function(){
27 if(oDiv.offsetLeft >= offset){ //Math.abs(oDiv.offsetLeft - offset)<speed;
28 clearInterval(timer);
29 }else{
30 oDiv.style.left = oDiv.offsetLeft + speed + "px";
31 }
32 },30)
33 }
34
35 //缓动运动条件 1.变化的运动速度,最后速度为零
36 //问题:offsetLeft
37 function offsetMove2(elem,offset){
38 clearInterval(elem.timer);
39 var speed = 0;
40 elem.timer = setInterval(function(){
41 speed = (offset - elem.offsetLeft)/8;
42 speed = speed>0?Math.ceil(speed):Math.floor(speed);
43
44 //是否到达到目标点
45 if(elem.offsetLeft == offset){
46 clearInterval(elem.timer);
47 }else{
48 elem.style.left = elem.offsetLeft + speed + "px";
49 }
50 },30)
51 }
52
53 //任意属性值
54 //避免小数值 parseInt(0.3*100)
55 function offsetMove3(elem,attr,offset){
56 clearInterval(elem.timer);
57 elem.timer = setInterval(function(){
58 var curAttr = getStyle(elem,attr); //当前属性值
59 var speed = (offset - curAttr)/8; //当前速度
60 speed = speed>0?Math.ceil(speed):Math.floor(speed);
61
62 if(offset == curAttr){
63 clearInterval(elem.timer);
64 }else{
65 if(attr=="opacity"){
66 elem.style.filter = "alpha(opacity="+(curAttr +speed)+")";
67 elem.style.opacity= (curAttr + speed)/100;
68 }else{
69 elem.style[attr] = (curAttr + speed) + "px";
70 }
71 }
72 },30)
73 }
74
75 //链式运动
76 function offsetMove4(elem,attr,offset,fn){
77 clearInterval(elem.timer);
78 elem.timer = setInterval(function(){
79 var curAttr = getStyle(elem,attr);
80 var speed = (offset - curAttr)/8;
81 speed = speed > 0? Math.ceil(speed):Math.floor(speed);
82
83 if(offset == curAttr){
84 clearInterval(elem.timer);
85 if(fn){ fn(); }
86 }else{
87 if(attr=="opacity"){
88 elem.style.filter = "alpha(opacity:"+(curAttr+speed)+")";
89 elem.style.opacity= (curAttr+speed)/100;
90 }else{
91 elem.style[attr] = curAttr + speed + "px";
92 }
93 }
94 },30)
95 }
96
97 //多个属性同时变化
98 function offsetMove5(elem,json,fn){
99 var isStop = true; //所有值都到达
100 clearInterval(elem.timer);
101 elem.timer = setInterval(function(){
102 //历遍json属性
103 for(var attr in json){
104 //1.取当前与速度
105 var offset = json[attr];
106 var curAttr = getStyle(elem,attr);
107 var speed = (offset - curAttr)/8;
108 speed = speed > 0? Math.ceil(speed):Math.floor(speed);
109
110 //2.检测停止
111 if(offset!=curAttr){
112 isStop = false;
113 }
114 if(attr=="opacity"){
115 elem.style.filter = "alpha(opacity:"+(curAttr+speed)+")";
116 elem.style.opacity= (curAttr+speed)/100;
117 }else{
118 elem.style[attr] = curAttr + speed + "px";
119 }
120 }
121 //所有值都到达目标值,则停止
122 if(isStop){
123 clearInterval(elem.timer);
124 if(fn){ fn(); }
125 }
126 },30);
127 }