完美运动框架js文件及说明
/*调用说明 node为节点 json为要变化的的属性组成的对象 例{300,height:200,opacity:30} 意思为要 让node节点对象 宽变化到300px,高变化到200px,不透明度变化到30。 complete 为当json对象的各项属性都变化到位时,需要执行什么。这里 传入函数。一般为匿名函数。也可以在匿名函数里在调用startMove()函数; 【注】这个参数为可选的,如果不写就代表结束,什么都不执行。 示例1 function(){alert(1)} //这样json对象的各项属性 都变化到位时,在浏览器警告框中输出1。 示例2 function(){startMove(node, json, complete)} //这样 写的意思是当上一个运动结束时在进行这一次运动。 综合示例: aDivs[i].onmouseover = function(){ startMove(aDivs[0], { 200, //宽度变为200px,不透明度变到30% opacity: 30 },function(){//上一个运动完成后,让高变为200px startMove(aDivs[0], { height:200 },function(){//在上一运动完成后,让左边距增加到100px startMove(aDivs[0],{ marginLeft:100 }) }) });//最后一个startMove()函数没有complete形参, //所以结束 */ //用的时候直接把代码拷走,调用即可,然后根据需要传参。 /*------------------完美运动框架------------------*/ function startMove(node, json, complete){ //complete = show clearInterval(node.timer); node.timer = setInterval(function(){ var isEnd = true; //假设都到达目的值了。 for(var attr in json){ //1、获取当前的值 var iCur = null; if(attr == "opacity"){ iCur = parseInt(parseFloat(getStyle(node, attr)) * 100); }else{ iCur = parseInt(getStyle(node, attr)) } //2、计算速度 var speed = (json[attr] - iCur) / 8; speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed); //3、运动和停止分开 if(attr == "opacity"){ iCur += speed; node.style.opacity = iCur / 100; node.style.filter = "alpha(opacity=" + iCur + ")"; }else{ node.style[attr] = iCur + speed + "px"; } //如果这个if语句成立,说明至少有一个样式没到达目的值 if(json[attr] != iCur){ isEnd = false; } } if(isEnd){ clearInterval(node.timer); if(complete){ complete(); } } }, 30); } //获取当前有效样式的兼容写法 function getStyle(obj, attr){ if(obj.currentStyle){ return obj.currentStyle[attr]; }else{ return getComputedStyle(obj)[attr]; } } /*------------------完美运动框架-end-----------------*/
调用示例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>利用运动动框架</title> <style> div { 100px;height:100px;background:black;} </style> <script src="tool-YDKJ.js">//引入上面封装的完美运动框架</script> <script> window.onload = function(){ var aDivs = document.getElementsByTagName('div'); for(var i = 0; i < aDivs.length; i++){ //鼠标移入 aDivs[i].onmouseover = function(){ startMove(aDivs[0], { 200, //宽变到200px,不透明度变到30% opacity: 30 },function(){ startMove(aDivs[0], {//上一运动结束后,高变为200px height:200 },function(){ startMove(aDivs[0],{//再上一个运动后左边距增加到100 marginLeft:100 }) }) }); } //鼠标移除 aDivs[i].onmouseout = function(){ startMove(aDivs[0], {//宽变恢复到100px,不透明度恢复到100% 100, opacity: 100 },function(){ startMove(aDivs[0], {//上一运动结束后,高恢复到100px height:100 },function(){ startMove(aDivs[0],{//再上一个运动后左边距恢复到0 marginLeft:0 }) }) }); } } } </script> </head> <body> <div></div> </body> </html>
浏览器效果: