この記事の例では、jQuery でのアニメーションと同様のアニメーション効果を js で実現する方法について説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです。
この例では、マウスを上に移動し、最初に幅を変更し、次に高さを変更し、最後に透明度を変更してマウスを外側に移動し、再び元に戻すという効果を実現できます。
ポイント 1:
startrun(obj,attr,target,fn) box.onmouseover = function(){ startrun(box,"width",200,function(){ startrun(box,"height",200,function(){ startrun(box,"opacity","100") }); }); }
上記のように、関数はパラメーターとしても使用でき、最初にアクションを実行し、次にアクションを実行するという効果を実現できます。
ポイント 2:
if(cur == target){ clearInterval(obj.timer); if(fn){ fn(); } }
移動が目標点に達したら、タイマーをオフにすると、新しい機能を実行できます。
最後に、コードを追加します:
<!DOCTYPE html> <html> <head> <meta charset="gb2312" /> <title>无标题文档</title> <style> <!-- body{margin:0; padding:0; font:12px/1.5 arial;} #box{width:100px; height:100px; position:absolute; background:#06c; left:0;filter:alpha(opacity=30); opacity:0.3;} --> </style> <script> <!-- function getstyle(obj,name){ if(obj.currentStyle){ return obj.currentStyle[name]; }else{ return getComputedStyle(obj,false)[name]; } } window.onload = function(){ var box = document.getElementById("box"); box.onmouseover = function(){ startrun(box,"width",200,function(){ startrun(box,"height",200,function(){ startrun(box,"opacity","100") }); }); } box.onmouseout = function(){ startrun(box,"height",100,function(){ startrun(box,"width",100,function(){ startrun(box,"opacity","30"); }); }); } } function startrun(obj,attr,target,fn){ clearInterval(obj.timer); obj.timer = setInterval(function(){ var cur = 0; if(attr == "opacity"){ cur = Math.round(parseFloat(getstyle(obj,attr))*100); }else{ cur = parseInt(getstyle(obj,attr)); } var speed = (target-cur)/8; speed = speed>0?Math.ceil(speed):Math.floor(speed); if(cur == target){ clearInterval(obj.timer); if(fn){ fn(); } }else{ if(attr == "opacity"){ obj.style.filter = "alpha(opacity="+(cur+speed)+")"; obj.style.opacity = (cur+speed)/100; }else{ obj.style[attr] = cur + speed + "px"; } } },30) } //--> </script> </head> <body> <div id="box"> </div> </body> </html>
この記事が皆様の JavaScript プログラミング設計に役立つことを願っています。