JavaScriptアニメーション基礎知識
3589 ワード
1.位置
文書の中の要素を特定の位置に置くのは簡単です.このような要素があると仮定しても良いです.
2.時間
JavaScript関数setTimeoutは、ある関数を所定の時間経過後に実行することができます.この関数には二つのパラメータがあります.最初のパラメータは通常文字列で、その内容は実行する関数の名前です.第二のパラメータは、ミリ秒単位で設定した値です.どれぐらいの時間がかかりますか?最初のパラメータで与えられた関数を実行し始めます.
私達は今モデベMessage関数を更新して、元素の移動をグラデーションで発生させます.次は新しいmoveMessage関数の論理です.
(1)要素の現在位置を取得します.
(2)要素が目的地に達した場合は、この関数を終了します.
(3)要素が目的地に到達していない場合は、目的地に少し近く移動します.
(4)上記のステップは、一定の時間間隔を経て、ステップ1から繰り返される.
以下はmoveMessage関数のコードリストです.
文書の中の要素を特定の位置に置くのは簡単です.このような要素があると仮定しても良いです.
<p id=”message”>Whee!</p>
したがって、この要素の位置はJavaScript関数で設定できます.function positionMessage(){
if(!document.getElementById) return false;
if(!document.getElementById("message")) return false;
var elem = document.getElementById("message");
elem.style.position = "absolute";
elem.style.left = "50px";
elem.style.top = "100px";
}
ページローディング時にこのpositionMessage関数を呼び出すと、このテキストはブラウザウィンドウの左端から50ピクセルに配置されます.ブラウザウィンドウのトップ境界から100ピクセルの位置:Window.onload = positionMessage;
ただし、addLoadEvent関数を使って完成したほうがいいです.以下の通りです.function addLoadEvent(func){
var oldonload = window.onload;
if(typeof window.onload != 'function'){
window.onload = func;
}else{
window.onload = function(){
oldonload();
func();
}
}
}
addLoadEvent(positionMessage);
ある要素の位置を変えるのも簡単です.一つの関数を実行して、この要素のstyle.topまたはstyle.leftなどの属性を変更すればいいです.function moveMessage(){
if(!document.getElementById) return false;
if(!document.getElementById("message")) return false;
var elem = document.getElementById("message");
elem.style.left = "200px";
}
もしmoveMessage関数をページローディング時に実行させると、この要素の位置は直ちに変化します.position関数によって与えられた元の位置は直ちに上書きされます.addLoadEvent(positionMessage);
addLoadEvent(moveMessage);
本当のアニメーション効果を実現するには、要素の位置を時間とともに変化させなければならない.だから私たちは時間の間隔を「創造」しなければならない.2.時間
JavaScript関数setTimeoutは、ある関数を所定の時間経過後に実行することができます.この関数には二つのパラメータがあります.最初のパラメータは通常文字列で、その内容は実行する関数の名前です.第二のパラメータは、ミリ秒単位で設定した値です.どれぐらいの時間がかかりますか?最初のパラメータで与えられた関数を実行し始めます.
setTimeout("function", interval)
clearTimeoutという関数で「実行待ち」キューの関数をキャンセルすることができます.この関数にはパラメータが必要です.あるsetTimeout関数が戻り値を呼び出す変数を保存しています.clearTimeout(variable)
positionMessage関数を変更して、5秒(または5000ミリ秒)後にmoveMessage関数を呼び出すようにします.function positionMessage(){
if(!document.getElementById) return false;
if(!document.getElementById("message")) return false;
var elem = document.getElementById("message");
elem.style.position = "absolute";
elem.style.left = "50px";
elem.style.top = "100px";
movement = setTimeout("moveMessage()", 5000);
}
positionMessage関数はまだページ読み込み時に実行されます.addLoadEvent(positionMessage);
3.時間の増分私達は今モデベMessage関数を更新して、元素の移動をグラデーションで発生させます.次は新しいmoveMessage関数の論理です.
(1)要素の現在位置を取得します.
(2)要素が目的地に達した場合は、この関数を終了します.
(3)要素が目的地に到達していない場合は、目的地に少し近く移動します.
(4)上記のステップは、一定の時間間隔を経て、ステップ1から繰り返される.
以下はmoveMessage関数のコードリストです.
function moveElement(elementID, final_x, final_y, interval){
if(!document.getElementById) return false;
if(!document.getElementById(elementID)) return false;
var elem = document.getElementById(elementID);
var xpos = parseInt(elem.style.left);
var ypos = parseInt(elem.style.top);
if(xpos == final_x && ypos == final_y){
return true;
}
if(xpos<final_x){
xpos++;
}
if(xpos>final_x){
xpos--;
}
if(ypos<final_y){
ypos++;
}
if(ypos>final_y){
ypos--;
}
elem.style.left = xpos + "px";
elem.style.top = ypos + "px";
var repeat = "moveElement('" + elementID + "'," + final_x + "," + final_y + "," +interval + ")";
movement = setTimeout(repeat, interval);
}