鍍金池/ 教程/ HTML/ JavaScript 動畫
書單
JavaScript 動畫
HTML
CSS Reset
屬性操作
DOM 事件
閉包
Photoshop
Atom 文本編輯器
表單操作
布局解決方案
類型系統(tǒng)
開發(fā)實踐
數(shù)據(jù)通信
變量作用域
BOM
JavaScript 程序設(shè)計
前端工程師概述
CSS
響應(yīng)式布局
表達(dá)式與運算符
基本語法
JavaScript 介紹
版本控制
布局
調(diào)試器
背景
圖片保存
多媒體
文檔樹
列表操作
Sublime 編輯器
盒模型
常見布局樣例
類型識別
變形
數(shù)據(jù)存儲
選擇器
頁面架構(gòu)
開發(fā)及調(diào)試工具
頁面模塊化
節(jié)點操作
測量及取色
瀏覽器兼容
HTML 簡介
內(nèi)置對象
實體字符
產(chǎn)品前端架構(gòu)
協(xié)作流程
切圖
工具, 面板, 視圖
正則表達(dá)式
動畫
語句
面向?qū)ο?/span>
HTML 語法
HTML 標(biāo)簽
技術(shù)選擇
樣式操作
圖片優(yōu)化與合并
語法
DOM 編程藝術(shù)
Canvas
接口設(shè)計
頁面優(yōu)化
文本

JavaScript 動畫

JavaScript 動畫

,為動畫的最小單位,一個靜態(tài)的圖像。幀頻,每秒播放的幀的數(shù)量。一個動畫是由很多幀組成的,因為人眼的暫留特性,當(dāng)圖片交替的速度大于每秒 30 幀以上既有動畫的感覺。

實現(xiàn)方式

  • gif 圖像形式存儲,容量大,需第三方制圖工具制作。
  • flash 需要第三方制作工具,不推薦。
  • CSS3 實現(xiàn)動畫具有局限性
  • JavaScript 可實現(xiàn)大部分上面幾類可實現(xiàn)的動畫效果

JavaScript 動畫三要素

http://wiki.jikexueyuan.com/project/fend_note/images/J/javascript-animation.jpg" alt="" />

定時器

setInterval

  • func 為執(zhí)行改變屬性的操作
  • delay 為出發(fā)時間間隔(毫秒為單位)
  • para1 為執(zhí)行時可傳入改變屬性函數(shù)的參數(shù)
var intervalId = setInterval(func, delay[, param1, param2, ...]);
clearInterval(intervalId);

NOTE:使用 setInterval 可以調(diào)用一次定時器既可實現(xiàn)連貫的動畫。使用 clearInterval 即可清除動畫效果。

setTimeout

  • func 為執(zhí)行改變屬性的操作
  • delay 為出發(fā)時間間隔(毫秒為單位)默認(rèn)為 0
  • para1 為執(zhí)行時可傳入改變屬性函數(shù)的參數(shù)
var timeoutId = setTimeout(func[, delay, param1, param2, ...]);
clearTimeout(timeoutId);

NOTE:使用 setTimeout 實現(xiàn)動畫,則需要在動畫每一幀結(jié)束時再次調(diào)用定時器。但它無需清除定時器。

區(qū)別

  • setTimeout 在延時后只執(zhí)行一次,setInterval 則會每隔一個延時期間后會再執(zhí)行。

requestAnimationFrame

類似于 setTimeout 但是無需設(shè)定時間間隔。此定時器為 HTML5 中的新標(biāo)準(zhǔn),其間隔時間不由用戶控制,而是由顯示器的刷新頻率決定。(市面上的顯示器刷新頻率為每秒刷新60次)

優(yōu)勢

  • 無需設(shè)置間隔時間
  • 動畫流暢度高
var requestId = requestAnimationFrame(func);
cancelAnimationFrame(requestId);

NOTE:使用它來實現(xiàn)動畫與 setTimeout 類似,需要每次每幀結(jié)束時再次調(diào)用。不可設(shè)置時間間隔(系統(tǒng)決定),時間間隔為16.67毫秒一幀。

常見動畫

大多的復(fù)雜動畫都是有下列的簡單動畫所組成的。

  • 形變,改變元素的寬高
  • 位移,改變元素相對位置
  • 旋轉(zhuǎn)
  • 透明度
  • 其他...

動畫函數(shù)

下面的例子為以 px 為單位的動畫代碼

var animation = function(ele, attr, from, to) {
  var distance = Math.abs(to - from);
  var stepLength = distance/100;
  var sign = (to - from)/distance;
  var offset = 0;
  var step = function(){
    var tmpOffset = offset + stepLength;
    if (tmpOffset < distance) {
      ele.style[attr] = from + tmpOffset * sign + 'px';
      offset = tmpOffset;
    } else {
      ele.style[attr] = to + 'px';
      clearInterval(intervalID);
    }
  }
  ele.style[attr] = from + 'px';
  var intervalID = setInterval(step, 10);
}
上一篇:類型識別下一篇:BOM