Tween.js 動畫效果

来源:http://www.cnblogs.com/createGod/archive/2017/06/04/6941340.html
-Advertisement-
Play Games

一、apply,和call的用法。 先來一個與本次博文無關的東西,就是apply和call的用法。其實apply和call的用法都一樣,只是他們的傳參不一樣。apply是數組,而call是單獨的傳,類似枚舉。 1.列子一把arguments轉化為標準數組,可以使用push等方法。 2.如何把argu ...


一、apply,和call的用法。

先來一個與本次博文無關的東西,就是apply和call的用法。其實apply和call的用法都一樣,只是他們的傳參不一樣。apply是數組,而call是單獨的傳,類似枚舉。

1.列子一把arguments轉化為標準數組,可以使用push等方法。

function test(){
    //arguments.push(5); //arguments.push is not a function
    console.log(arguments)
    var arg = Array.prototype.slice.apply(arguments,[]);
   // var arg = Array.prototype.slice.call(arguments,'');
    console.log(arg); //[1,2,3,4]
    arg.push(5); // [1,2,3,4,5]
}

test(1,2,3,4);

2.如何把arguments中的參數直接push到一個數組裡面?(也藉助apply)

function test(){
    var arg = [];
    Array.prototype.push.apply(arg,arguments);
    console.log(arg); // [1,2,3,4] 是不是發現要把一個數組
    //插入到另外一個數組的後面不用for迴圈了,也不用contact了呢?
    //其實apply 和call還是有多用法,比如繼承。其實主要是把
    //前面對象的方法賦給後面對象而已。比如 object.apply(object1,arg)
    //把object的方法賦給 object1。而 arg是參數。
}

test(1,2,3,4);

插曲到此為止。下麵主要講解下tween.js

 

二、關於Tween.js

1.Tween.js是一個包含各種經典動畫演算法的JS資源。其實更jQuery.easing.js很多類似之處。主要的方法名也一致。不壓縮代碼也就800來行。

 

主要包含了:

  1. Linear:線性勻速運動效果;
  2. Quadratic:二次方的緩動(t^2);
  3. Cubic:三次方的緩動(t^3);
  4. Quartic:四次方的緩動(t^4);
  5. Quintic:五次方的緩動(t^5);
  6. Sinusoidal:正弦曲線的緩動(sin(t));
  7. Exponential:指數曲線的緩動(2^t);
  8. Circular:圓形曲線的緩動(sqrt(1-t^2));
  9. Elastic:指數衰減的正弦曲線緩動;
  10. Back:超過範圍的三次方緩動((s+1)*t^3 – s*t^2);
  11. Bounce:指數衰減的反彈緩動。

每個效果都分三個緩動方式,分別是:

  • easeIn:從0開始加速的緩動,也就是先慢後快;
  • easeOut:減速到0的緩動,也就是先快後慢;
  • easeInOut:前半段從0開始加速,後半段減速到0的緩動。

很多小伙伴easeIneaseOut哪個先快,哪個先慢一直記不清楚,我這裡再給大家傳授一遍我獨門的邪惡記法,想想我們第一次OOXX,是不是進去(easeIn)的時候都是先慢,等進去了就快了;然後出來(easeOut)的時候,開始很快,都要出來了戀戀不捨速度就慢了。跟我們這裡的動畫效果是完全匹配的。

所有的這些緩動演算法都離不開下麵4個參數,tbcd,含義如下

/*
 * t: current time(當前時間);
 * b: beginning value(初始值);
 * c: change in value(變化量);
 * d: duration(持續時間)。
 */

2.console.log(TWEEN);

console.log(TWEEN)

可以看出在TWEEN上掛載了很多方法,以及對象。只要我們一個一個的挖掘,就知道具體有啥用了。

三、先來一個小列子。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #target{
            width: 100px;
            height: 100px;
            background: red;
        }
    </style>
</head>
<body>
    <div id="target"></div>
</body>
<script src="tween.js"></script>
<script src="index.js"></script>
</html>
var position;
var target;
var tween, tweenBack;

init();
animate();

function init() {

    position = {x: 100, y: 100, rotation: 0};
    target = document.getElementById('target');
    tween = new TWEEN.Tween(position)
      .to({x: 700, y: 200, rotation: 359}, 2000)
      .delay(1000)
      .easing(TWEEN.Easing.Elastic.InOut)
      .onUpdate(update);

    tweenBack = new TWEEN.Tween(position)
      .to({x: 100, y: 100, rotation: 0}, 3000)
      .easing(TWEEN.Easing.Elastic.InOut)
      .onUpdate(update);

    tween.chain(tweenBack);
    tweenBack.chain(tween);

    tween.start();

}

function animate( time ) {

    requestAnimationFrame( animate );

    TWEEN.update( time );

}

function update() {

    target.style.webkitTransform = 'translate('+position.x+ 'px'+','+ position.y + 'px' +')' + 'rotate(' + Math.floor(position.rotation) + 'deg)';
    //target.style.webkitTransform = 'rotate(' + Math.floor(position.rotation) + 'deg)';
   // target.style.MozTransform = 'rotate(' + Math.floor(position.rotation) + 'deg)';

}

 

 

 

每個api對應源碼去追尋。就知道用法了。比較源碼也就800多行而已。

四、運動函數

(function() {
    var lastTime = 0;
    var vendors = ['ms', 'moz', 'webkit', 'o'];
    for(var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) {
        window.requestAnimationFrame = window[vendors[x]+'RequestAnimationFrame'];
        window.cancelAnimationFrame = window[vendors[x]+'CancelAnimationFrame'] 
                                   || window[vendors[x]+'CancelRequestAnimationFrame'];
    }
 
    if (!window.requestAnimationFrame)
        window.requestAnimationFrame = function(callback, element) {
            var currTime = new Date().getTime();
            var timeToCall = Math.max(0, 16 - (currTime - lastTime));
            var id = window.setTimeout(function() { callback(currTime + timeToCall); }, 
              timeToCall);
            lastTime = currTime + timeToCall;
            return id;
        };
 
    if (!window.cancelAnimationFrame)
        window.cancelAnimationFrame = function(id) {
            clearTimeout(id);
        };
}());

五、結束語。

人的一生中有許多的小路,彎路,大路,坑坑窪窪的泥漿路,反正我家鄉就是坑坑窪窪的泥漿路。從接觸第一個網站到現在已經快6年時間。時間過得真快,生命歷程軌跡變化也快。要從坑坑窪窪的泥漿路走出一條光明大道,就必須前進,不能絲毫有退縮之意。在一個領域能走多遠,就看你能堅持多久了。有人說當你在一個領域堅持了10000個小時,你就是這個領域的大師了。10000/24 ?好像是400多天。除去睡覺時間,上班時間,打游戲時間。估計得4-6年才能有10000個小時。另祝大家,天天開心,事事順心。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • |--font # 字體文件|--images # 圖片資源文件|--sound # 聲音資源文件|--fly.py # 生成自己和字母的fly文件|--main_game.py # 主函數文件|--zidan.py # 生成子彈的文件|--README.txt 主程式文件。 ...
  • Eclipse neon 漢化版 ; 1;右擊新建 --> 選擇 動態Web項目 2: 填寫 項目名 項目位置 ; 選擇 Dynamic web module version 和 tomcat version ; 點擊完成 即可創建 項目; 2.1:項目名稱; 2.2:項目位置; 2.3: Dyna ...
  • A 調用攝像頭拍照,自定義裁剪編輯頭像,頭像圖片色度調節B 集成代碼生成器 [正反雙向](單表、主表、明細表、樹形表,快速開發利器)+快速表單構建器 freemaker模版技術 ,0個代碼不用寫,生成完整的一個模塊,帶頁面、建表sql腳本,處理類,service等完整模塊C 集成阿裡巴巴資料庫連接池 ...
  • 1.基礎表單 :對於基礎表單,Bootstrap並未對其做太多的定製性效果設計,僅僅對錶單內的fieldset、legend、label標簽進行了定製。 fieldset { min-width: 0; padding: 0; margin: 0; border: 0; } legend { dis ...
  • 今天敲代碼的時候,正好碰到這個問題. 與大家分享這個解決方法: 1/7 到bootstrap官方網站下載,對於我們開發者來說,直接下載編譯和壓縮後的CSS、JavaScript文件,另外還包含字體文件,但是不包含文檔和源碼文件。打開解壓包之後可以發現包含三個文件夾 css、fonts、js。這是最基 ...
  • 因為最近在搞百度地圖API的時候到了webpack的externals,才發現我之前都只是用webpack做一些搭建完項目後的“收尾工作”——即打包,而沒有把它納入到項目開發的“主體過程”中來,真是“物不盡其用”。於是就有了我今天的這篇文章。 本文提綱:1.複習webpack的知識 2.詳解webp... ...
  • 1、CSS定義 CSS 指層疊樣式表 (Cascading Style Sheets),是一種樣式表語言,用來描述 HTML 或 XML(包括如 SVG、XHTML 之類的 XML 分支語言)文檔的呈現。CSS 描述了在屏幕、紙質、音頻等其它媒體上的元素應該如何被渲染的問題。 2、為何使用CSS 網 ...
  • 在前面兩篇博客中,我們討論了Android中的事件分發的相關內容,那麼在本篇博客當中,我們就簡單探討一下html或javascript中的事件分發機制,併進行簡單的對比。 在前端中,對事件進行綁定有三種方式。 (1).在DOM中綁定。 (2).在腳本中綁定。 (3).通過監聽事件 綁定 而對於前兩種 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...