成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

通過時(shí)間扭曲實(shí)現(xiàn)緩動(dòng)動(dòng)畫

oogh / 713人閱讀

摘要:通過時(shí)間扭曲實(shí)現(xiàn)緩動(dòng)動(dòng)畫經(jīng)常會(huì)見到各類緩動(dòng)函數(shù),在里面有現(xiàn)成的等緩動(dòng)效果直接用。這次的實(shí)踐在一個(gè)封裝的基礎(chǔ)上,請(qǐng)參考精靈封裝緩動(dòng)動(dòng)畫的本質(zhì),是在單位時(shí)間內(nèi)移動(dòng)不同的距離。

通過時(shí)間扭曲實(shí)現(xiàn)緩動(dòng)動(dòng)畫

經(jīng)常會(huì)見到各類緩動(dòng)函數(shù),在CSS里面有現(xiàn)成的bounce、elastic等緩動(dòng)效果直接用。如果在canvas動(dòng)畫中,我們要實(shí)現(xiàn)這些緩動(dòng)函數(shù)。直接去思考怎么處理挺頭疼的,介紹一種不錯(cuò)的實(shí)現(xiàn)方式,源自《HTML5 Canvas核心技術(shù)》。

這次的實(shí)踐在一個(gè)封裝的基礎(chǔ)上,請(qǐng)參考:canvas精靈封裝

Begin

緩動(dòng)動(dòng)畫的本質(zhì),是在單位時(shí)間內(nèi)移動(dòng)不同的距離。

一個(gè)簡單的公式:距離 = 速度 × 時(shí)間;

要實(shí)現(xiàn)距離緩動(dòng),只有兩種方式:

要么保持時(shí)間正常流動(dòng),實(shí)現(xiàn)速度緩動(dòng);

要么保持速度不變實(shí)現(xiàn)時(shí)間扭曲;

下圖是elastic效果的距離與時(shí)間函數(shù),我亂拿了一個(gè)三角函數(shù)圖像,忽略掉負(fù)軸就好

△V = △S / △T,理論上對(duì)距離/時(shí)間曲線進(jìn)行求導(dǎo),得到速度的變化曲率,改變速度也能實(shí)現(xiàn)。

這次實(shí)現(xiàn)的是保持速度不變,扭曲時(shí)間實(shí)現(xiàn)緩動(dòng):

1、每個(gè)動(dòng)畫時(shí)間固定,通過時(shí)間能獲取到動(dòng)畫進(jìn)度:

先給出時(shí)間扭曲函數(shù):

f(x) = ((1 - cos(x * pi * 3)) * (1-x)) + x

轉(zhuǎn)換成代碼:

var makeElastic = function (passes) {// passes是跳動(dòng)的次數(shù)
       passes = passes || 3;
       return function (percentComplete) {
           return ((1-Math.cos(percentComplete * Math.PI * passes)) *
               (1 - percentComplete)) + percentComplete;
    };
};

函數(shù)圖像:

通過Sprite封裝的behavior來實(shí)現(xiàn)時(shí)間扭曲

var moveBall = {
        updateBallPosition: function(elapsed){
            if (arrow === LEFT){
                ball.left -= ball.velocityX * (elapsed/1000);
            } else{
                   ball.left += ball.velocityX * (elapsed/1000);
            }
        },
        execute: function(ball, context,time){
            // 核心!
            // 這里的animationElapsed是被扭曲過的時(shí)間
            // getElapsedTime()就是上面的makeElastic
            // 經(jīng)過一些封裝,傳入t得出扭曲過的時(shí)間
            var animationElapsed = pushAnimationTimer.getElapsedTime(),
                elapsed;
                
            elapsed = animationElapsed - this.lastTime;
            this.updateBallPosition(elapsed);
            
        }
    }


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/87925.html

相關(guān)文章

  • 可能是最全的前端動(dòng)效庫匯總

    摘要:非常的龐大,而且它是完全為設(shè)計(jì)而生的動(dòng)效庫。它運(yùn)行于純粹的之上,是目前最強(qiáng)健的動(dòng)畫資源庫之一??赡苁莿?chuàng)建滾動(dòng)特效最好用的工具,它支持大量的瀏覽器,只要它們支持和特性。可以通過安裝吊炸天了,接近現(xiàn)實(shí)生活中的物理運(yùn)動(dòng)碰撞慣性動(dòng)畫庫。 收集日期為2019-02-28,★代表當(dāng)時(shí)的該項(xiàng)目在github的star數(shù)量 Animate.css 56401 ★ 一個(gè)跨瀏覽器的動(dòng)效基礎(chǔ)庫,是許多基礎(chǔ)動(dòng)...

    afishhhhh 評(píng)論0 收藏0
  • React Motion 緩動(dòng)函數(shù)剖析

    摘要:大家可以嘗試使用的,配置一個(gè)合適的勁度系數(shù)和空氣阻力。所做的事,只不過自己實(shí)現(xiàn)了一套緩動(dòng)函數(shù)。 根據(jù)經(jīng)典力學(xué)的觀點(diǎn),世界上所有的原子每時(shí)每刻仿佛都會(huì)根據(jù)當(dāng)前速度、受力和位置計(jì)算出下一刻的速度、受力和位置。上帝有一臺(tái)超級(jí)計(jì)算機(jī)嗎?非也,反而計(jì)算機(jī)是我們利用原子的這些特性拼裝出來的?,F(xiàn)在,我們卻要用計(jì)算機(jī),像上帝那樣,再造一個(gè)世界。 我不知道這個(gè)世界上有沒有仿世學(xué),但是既然動(dòng)畫是要模仿現(xiàn)實(shí)...

    wfc_666 評(píng)論0 收藏0
  • 【前端優(yōu)化】動(dòng)畫幾種實(shí)現(xiàn)方式總結(jié)和性能分析

    摘要:備注沒整理格式,抱歉動(dòng)畫實(shí)現(xiàn)的幾種方式性能排序?qū)崿F(xiàn)方式自身調(diào)用調(diào)用的定時(shí)器值推薦最小使用的原因即每秒幀為什么倒計(jì)時(shí)動(dòng)畫一定要用而避免使用兩者區(qū)別及引發(fā)的線程討論線程討論為什么單線程是的一大特性。 備注:沒整理格式,抱歉 動(dòng)畫實(shí)現(xiàn)的幾種方式:性能排序js < requestAnimationFrame 3->4->2. 那么在來看你這段代碼。 var t = true; window...

    IamDLY 評(píng)論0 收藏0
  • JS—動(dòng)畫緩動(dòng)—tween.js

    摘要:動(dòng)畫運(yùn)動(dòng)算法線性勻速運(yùn)動(dòng)效果二次方的緩動(dòng)三次方的緩動(dòng)四次方的緩動(dòng)五次方的緩動(dòng)正弦曲線的緩動(dòng)指數(shù)曲線的緩動(dòng)圓形曲線的緩動(dòng)指數(shù)衰減的正弦曲線緩動(dòng)超過范圍的三次方緩動(dòng)指數(shù)衰減的反彈緩動(dòng)。 requestAnimFrame兼容 window.requestAnimFrame = (function (callback,time) { return window.requestAnima...

    wangxinarhat 評(píng)論0 收藏0
  • CSS Animations vs Web Animations API

    摘要:方法接受兩個(gè)參數(shù)關(guān)鍵幀和持續(xù)時(shí)間。第一個(gè)參數(shù),關(guān)鍵幀,是一個(gè)對(duì)象數(shù)組,每個(gè)對(duì)象都是動(dòng)畫中的一個(gè)關(guān)鍵幀。為我們提供了兩種不同的方式設(shè)置緩動(dòng)在我們的關(guān)鍵幀數(shù)組或我們的選項(xiàng)對(duì)象內(nèi)。實(shí)際上,這些緩動(dòng)應(yīng)用在關(guān)鍵幀之間,而不是整個(gè)動(dòng)畫。 作者:Ollie Williams 原文:CSS Animations vs Web Animations API 在 JavaScript 有一個(gè)原生動(dòng)畫...

    2501207950 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<