搜尋

首頁  >  問答  >  主體

javascript - 原生JS运动框架性能优化问题???

这个运动框架在性能方面有没有修改优化的地方呢,比如 for/in 能不能换成普通的for循环,如果可以该如何换? setInterval能不能换成setTimeout ,如果可以,该如何换?

框架示例源码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>运动框架性能优化</title>



<script> window.onload=function(){ var ob=document.getElementById('b1'); startMove(ob,{"width":700,"height":700}); // 框架使用方法 } // end onload function getStyle(obj,name){ // 获取属性值 用于运动框架里 if(obj.currentStyle){ return obj.currentStyle[name]; }else{ return getComputedStyle(obj,false)[name]; } } //end getStyle function startMove(obj,json){ var totalOk, // totalOk 为是否到达目标值 判断 curr当前对象的 要变化的属性值 curr, speed, attr; clearInterval(obj.timer); //先清空定时器 obj.timer=setInterval(function(){ totalOk=true; // 是否到达目标 判断 变量 for(attr in json){ //遍历 传进来的属性 {"height":xx,"width":xxx} curr=0; if(attr=='opacity'){ // 透明度变化 与 宽高 等这些值变化 不一样 所以做个判断 curr=Math.round(parseFloat(getStyle(obj,attr))*100); }else{ curr=Math.round(parseInt(getStyle(obj,attr))); } // 取属性值 speed=(json[attr]-curr)/10; speed=speed>0?Math.ceil(speed):Math.floor(speed); // 定义运动形式 及 初始化运动值 if(curr!=json[attr]) // 如果 没到达 目标 为false; totalOk=false; if(attr=='opacity'){ // 透明度变化 与 宽高 等这些值变化 不一样 所以做个判断 obj.style.filter='alpha(opacity:'+(curr+speed)+')'; //兼容IE6 obj.style.opacity=(curr+speed)/100; }else{ obj.style[attr]=curr+speed+'px'; } // 计算运动 } // end for/in //循环结束后 判断所有动画是否已经执行到位 如果到位 则关闭定时器 否则继续执行动画 不关闭定时器 if(totalOk){ // 如果到达目标 关闭定时器 clearInterval(obj.timer); }; },10); } // end startMove; </script>

</head>

<body>


<p id="b1" style="width:100px;height:100px;background:#0099FF;"></p>



</body>
</html>
PHP中文网PHP中文网2802 天前692

全部回覆(0)我來回復

無回覆
  • 取消回覆