在js中,我们经常会编写代码,实现元素变化运动,如width,height,opacity等
原生封装了运动框架,代码如下
/*
* 实现多动画同时运动(多物体运动框架)
*
* 调用示例 var container = document.getElementById('container');
* startMultiMove(container,{width:800,height:800,opacity:100},
* function(){alert('123');
* });
* obj -> dom对象
* json -> style的json数组
* fn -> 运动之后应该执行的函数
*
* */
function startMultiMove(obj,json,fn) {
//清除定时器,防止鼠标重复移动在元素上的情况
clearInterval(obj.time);
//设置定时器
obj.time = setInterval(function () {
for(var attr in json){
var flag = true;//判断是否全部都达到目标值
var curr = 0; //记录属性对应的值
//获得属性对应的当前值
if (attr == 'opacity'){
//Math.round 四舍五入
curr = Math.round( parseFloat(getStyle(obj,attr)*100) );
}else{
curr = parseInt( getStyle(obj,attr) );
}
//设置缓冲动画,计算动画变动频率值
var speed = (json[attr] - curr) / 8;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if (curr != json[attr]) {
//没有全部达到目标值,设置为false;
flag = false;
}
if(attr == 'opacity'){
curr = curr + speed;
obj.style.filter = 'alpha(opacity = '+curr+ ')';
obj.style.opacity = curr/100;
}else {
curr = curr + speed;
obj.style[attr] = curr + 'px';
}
}
if(flag){
clearInterval(obj.time);
if(fn){//有函数则执行
fn();
}
}
}, 30);
}
说明:getStyle是原生封装的获取元素的style样式(非行间),附上链接 [如何获取元素的style样式 ]
startMultiMove()函数可以实现的功能
1.同时改变元素的多条或一条style属性,实现物体运动
2.改变属性后可以立即执行一个函数,用户触发其他时间