-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmove.js
More file actions
70 lines (60 loc) · 1.82 KB
/
Copy pathmove.js
File metadata and controls
70 lines (60 loc) · 1.82 KB
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
//版权 北京智能社©, 保留所有权利
//'完美'运动
function move(obj,json,opational){
//var opational={time:500}; var opational;
opational=opational||{};
opational.time=opational.time||300;
opational.fn=opational.fn||null;
opational.type=opational.type||'ease-out';
var start={};//准备一个空start用来存储一堆初始值
var dis={};//准备一个空dis用来存储一堆运动距离
for(var key in json){//挑出用户传入的json
start[key]=parseFloat(getStyle(obj,key));//每一个属性的起始位置
dis[key]=json[key]-start[key]; //每一个属性的运动距离
}
var count=Math.round(opational.time/30);
var n=0;
clearInterval(obj.timer);
obj.timer=setInterval(function(){
n++;
for(var key in json){
switch(opational.type){
case 'linear':
var a=n/count;//0---1的数
var cur=start[key]+dis[key]*a;//匀速
break;
case 'ease-in':
var a=n/count;//0---1的数
var cur=start[key]+dis[key]*(a*a*a);//加速
break;
case 'ease-out':
var a=1-n/count;//0---1的数
var cur=start[key]+dis[key]*(1-a*a*a);//减速
break;
case 'ease-in-out'://过渡一下
if(n/count<=0.5){
//加速
var a=n/count*1.5;//0---1的数
var cur=start[key]+dis[key]*(a*a*a);//加速
}else{
//减速
move(obj,json,{time:opational.time/2,fn:opational.fn});
}
break;
}
if(key=='opacity'){
obj.style.opacity=cur;
obj.style.filter='alpha(opacity='+(cur*100)+')';
}else{
obj.style[key]=cur+'px';
}
}
if(n==count){//停止条件
clearInterval(obj.timer);
opational.fn && opational.fn(); //回调函数存在(用户传了函数),再去调用
}
},30);
}
function getStyle(obj,attr){
return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj,false)[attr];
}