Das Beispiel in diesem Artikel beschreibt, wie js ähnliche Animationseffekte wie animate in jquery erzielen kann. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:
Dieses Beispiel kann den Effekt erzielen, die Maus nach oben zu bewegen, zuerst die Breite zu ändern, dann die Höhe zu ändern und schließlich die Transparenz zu ändern, die Maus nach außen zu bewegen und dann wieder zurück zu ändern.
Punkt 1:
startrun(obj,attr,target,fn) box.onmouseover = function(){ startrun(box,"width",200,function(){ startrun(box,"height",200,function(){ startrun(box,"opacity","100") }); }); }
Wie oben können Funktionen auch als Parameter verwendet werden, wodurch der Effekt erzielt werden kann, dass zuerst eine Aktion ausgeführt wird und dann eine Aktion ausgeführt wird.
Punkt 2:
if(cur == target){ clearInterval(obj.timer); if(fn){ fn(); } }
Wenn die Bewegung den Zielpunkt erreicht, schalten Sie den Timer aus und Sie können dann die neue Funktion ausführen.
Zum Schluss fügen Sie den Code hinzu:
<!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>
Ich hoffe, dass dieser Artikel für das JavaScript-Programmierdesign aller hilfreich sein wird.