JavaScript動畫基礎知識

來源:互聯網
上載者:User
1.位置

把文檔中某個元素擺放到一個特定的位置是很容易的事。不妨假設有一個這樣的元素:

<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.時間遞增量

我們現在更新一下moveMessage函數,讓元素的移動以漸層的方式發生。下面是新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);}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.