tweenjs

tweenjs 是使用 JavaScript 中的一個(gè)簡(jiǎn)單的補(bǔ)間動(dòng)畫庫(kù),支持?jǐn)?shù)字、對(duì)象的屬性和 CSS 樣式屬性的賦值。

tweenjs 以平滑的方式修改元素的屬性值苇倡,需要傳遞給 tween 要修改的值、動(dòng)畫結(jié)束時(shí)的最終值和動(dòng)畫花費(fèi)時(shí)間(duration)囤踩,之后 tween 引擎就可以計(jì)算從開始動(dòng)畫點(diǎn)到結(jié)束動(dòng)畫點(diǎn)之間值旨椒,從而產(chǎn)生平滑的動(dòng)畫效果。

使用

  • tweenjs CDN

    https://cdnjs.cloudflare.com/ajax/libs/tween.js/17.1.1/Tween.min.js
    
  • tweenjs 下載到本地堵漱,密碼是 ywoq综慎。

  • tweenjs github

  • tweenjs 實(shí)例

    var box = document.createElement('div');
    box.style.setProperty('background-color', '#008800');
    box.style.setProperty('width', '100px');
    box.style.setProperty('height', '100px');
    document.body.appendChild(box);
    
    function animate(time) {
        requestAnimationFrame(animate);
        TWEEN.update(time);
    }
    requestAnimationFrame(animate);
    
    var coords = { x: 0, y: 0 };
    var tween = new TWEEN.Tween(coords) 
            .to({ x: 300, y: 200 }, 1000) 
            .easing(TWEEN.Easing.Quadratic.Out) 
            .onUpdate(function() { 
                box.style.setProperty('transform', 'translate(' + coords.x + 'px, '     + coords.y + 'px)');
            })
            .start(); 
    

示例說(shuō)明

  1. 假設(shè)有一個(gè)對(duì)象 position ,它的坐標(biāo)為 x 和 y
var position = { x: 100, y: 0 }
  1. 改變 x 的值從 100 到 200 勤庐,持續(xù)時(shí)間為 1s
var tween = new TWEEN.Tween(position)
tween.to({x: 200}, 1000)
  1. 創(chuàng)建 tween 對(duì)象后寥粹,激活它,從而讓它開始動(dòng)畫
tween.start();
  1. 為了平滑的動(dòng)畫效果埃元,需要在同一個(gè)循環(huán)動(dòng)畫中調(diào)用 TWEEN.update 方法
animate();
function animate(){
    requestAnimationFrame(animate);
    TWEEN.update();
}

這個(gè)動(dòng)作將會(huì)更新所有被激活的 tweens ,在 1s 內(nèi) position.x 將變?yōu)?200 媚狰。

  1. 可以使用 onUpdate 回調(diào)函數(shù)將結(jié)果打印到控制臺(tái)上
tween.onUpdate(function(){
    console.log( this.x );
})

這個(gè)函數(shù)在每次 tween 被更新時(shí)都會(huì)被調(diào)用

tweenjs 動(dòng)畫

Tween.js 本身不會(huì)運(yùn)行岛杀,你需要通過(guò) update 方法明確告訴它什么時(shí)候開始運(yùn)行,推薦在動(dòng)畫主循環(huán)中使用該動(dòng)畫崭孤,可以調(diào)用 requestAnimationFrame 方法來(lái)獲得良好的圖像性能

使用無(wú)參數(shù)的調(diào)用方法类嗤,update 將明確當(dāng)前時(shí)間。也可以為 update 方法法明確一個(gè)時(shí)間辨宠。

TWEEN.update(100);

update 的時(shí)間為 100毫秒 遗锣,可以使用這種方法來(lái)明確代碼中所有隨時(shí)間變化的函數(shù)。

控制 tween 動(dòng)畫

  • startstop ==> Tween.startTween.stop 分別用來(lái)控制 tween 動(dòng)畫的開始和結(jié)束
    對(duì)于已經(jīng)結(jié)束和沒有開始的動(dòng)畫嗤形,Tween.stop 方法不起作用精偿。 Tween.start 可以方法接收一個(gè)時(shí)間參數(shù),若使用了該參數(shù),tween 動(dòng)畫將在延遲該時(shí)間數(shù)后才開始動(dòng)畫笔咽,否則他將立刻開始動(dòng)畫搔预。

  • update ==> 通過(guò) TWEEN.update 方法執(zhí)行動(dòng)畫的更新

  • chain ==> 制作多個(gè)多行,例如一個(gè)動(dòng)畫在另一個(gè)動(dòng)畫結(jié)束后開始叶组,可以通過(guò) chain 來(lái)實(shí)現(xiàn)

    tweenA.chain(tweenB);  //tweenB 在 tweenA 之后開始動(dòng)畫拯田,故可以制作一個(gè)無(wú)線循環(huán)的動(dòng)畫
    tweenB.chain(tweenA);
    
  • repeat ==> 制作循環(huán)動(dòng)畫,優(yōu)于 chain甩十,接收一個(gè)用于描述循環(huán)次數(shù)的參數(shù)

    tween.repeat(10);
    tween.repeat(infinity);
    
  • delay ==> 用于控制動(dòng)畫之間的延遲

    tween.delay(1000);
    tween.start()
    

回調(diào)函數(shù)

可以在每次 tween 循環(huán)周期的指定時(shí)間點(diǎn)調(diào)用自定義的函數(shù)

  • onStart ==> tween 動(dòng)畫開始前的回調(diào)函數(shù)
  • onStop ==> tween 動(dòng)畫結(jié)束后的回調(diào)函數(shù)
  • onUpdate ==> 在 tween 動(dòng)畫每次更新后執(zhí)行
  • onComplete ==> 在 tween 動(dòng)畫全部結(jié)束后執(zhí)行
var tween = new TWEEN.Tween({

}).to({

}).onStart(function(){

}).onUpdate(function(){

})

動(dòng)畫運(yùn)動(dòng)算法(緩動(dòng)函數(shù))easing函數(shù)

  • Linear ==> 線性勻速運(yùn)動(dòng)效果
  • Quadratic ==> 二次方的緩動(dòng)(t^2)
  • Cubic ==> 三次方的緩動(dòng)()
  • Quartic ==> 四次方的緩動(dòng)()
  • Quintic ==> 五次方的緩動(dòng)
  • Sinusoidal ==> 正弦曲線的緩動(dòng)()
  • Exponential ==> 指數(shù)曲線的緩動(dòng)()
  • Circular ==> 圓形曲線的緩動(dòng)()
  • Elastic ==> 指數(shù)衰減的正弦曲線緩動(dòng)()
  • Back ==> 超過(guò)范圍的三次方的緩動(dòng)
  • Bounce ==> 指數(shù)衰減的反彈緩動(dòng)

緩動(dòng)方式(效果)easing類型

  • easeIn(In) ==> 加速船庇,先慢后快
  • easeOut(Out) ==> 減速,先快后慢
  • easeInOut(InOut) ==> 前半段加速侣监,后半段減速

使用公式

.easing(TWEEN.Easing.easing函數(shù).easing類型)

tweenjs 源碼

控制動(dòng)畫方法
緩動(dòng)函數(shù)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鸭轮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子达吞,更是在濱河造成了極大的恐慌张弛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酪劫,死亡現(xiàn)場(chǎng)離奇詭異吞鸭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)覆糟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門刻剥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人滩字,你說(shuō)我怎么就攤上這事造虏。” “怎么了麦箍?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵漓藕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我挟裂,道長(zhǎng)享钞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任诀蓉,我火速辦了婚禮栗竖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渠啤。我一直安慰自己狐肢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布沥曹。 她就那樣靜靜地躺著份名,像睡著了一般碟联。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上同窘,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天玄帕,我揣著相機(jī)與錄音,去河邊找鬼想邦。 笑死裤纹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丧没。 我是一名探鬼主播鹰椒,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼呕童!你這毒婦竟也來(lái)了漆际?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤夺饲,失蹤者是張志新(化名)和其女友劉穎奸汇,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體往声,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡擂找,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浩销。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贯涎。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖慢洋,靈堂內(nèi)的尸體忽然破棺而出塘雳,到底是詐尸還是另有隱情,我是刑警寧澤普筹,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布败明,位于F島的核電站,受9級(jí)特大地震影響太防,放射性物質(zhì)發(fā)生泄漏肩刃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一杏头、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沸呐,春花似錦醇王、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春棘伴,著一層夾襖步出監(jiān)牢的瞬間寞埠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工焊夸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仁连,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓阱穗,卻偏偏與公主長(zhǎng)得像饭冬,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子揪阶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • TweenJS類庫(kù)主要用來(lái)調(diào)整和動(dòng)畫HTML5和Javascript屬性昌抠。提供了簡(jiǎn)單并且強(qiáng)大的tweening接口...
    AndyXB閱讀 3,275評(píng)論 0 0
  • TweenJs 是一個(gè)第三方的 javascript 動(dòng)畫庫(kù),可以輕松實(shí)現(xiàn)各種緩動(dòng)動(dòng)畫效果鲁僚。 一炊苫、TweenJs ...
    djyuning閱讀 20,134評(píng)論 0 4
  • 移動(dòng)端h5的三大抽獎(jiǎng)方式:轉(zhuǎn)盤,老虎機(jī)冰沙,翻紙牌侨艾。前兩樣demo比較多,用戶也審美疲勞了倦淀。這次微信公眾號(hào)要抽獎(jiǎng)蒋畜,于是...
    stois閱讀 3,809評(píng)論 1 4
  • 一:canvas簡(jiǎn)介 1.1什么是canvas? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,685評(píng)論 2 32
  • 看了很多視頻撞叽、文章姻成,最后卻通通忘記了,別人的知識(shí)依舊是別人的愿棋,自己卻什么都沒獲得科展。此系列文章旨在加深自己的印象,因...
    DCbryant閱讀 725評(píng)論 0 2