功能強大的前端動畫庫插件anime.js

2021-02-18 前端圈兒

本期介紹一個前端動畫插件anime.js,anime.js 是一款功能強大的 Javascript 動畫庫插件,可以和 CSS3 屬性,SVG,DOM 元素和 JS 對象一起工作,製作出各種高性能,平滑過渡的動畫效果。

安裝
npm install animejs
bower install animejs

在頁面中引入 anime.min.js 文件。

<script type="text/javascript" src="js/anime.min.js"></script>

HTML 結構# 初始化插件通過anime() 方法來構造一個對象實例,以json 對象的方式傳入需要的參數:
var myAnimation = anime({
  targets: ['.blue'],
  translateX: '13rem',
  rotate: 180,
  borderRadius: 8,
  duration: 2000,
  loop: true
});

配置參數參數使用教程動畫的目標對象(targets)CSS選擇器

「不可使用偽元素」

anime({
  targets: '.css-selector-demo .el',
  translateX: 250
});

DOM元素 /元素序列

使用DOM節點或節點的集合作為動畫目標

var elements = document.querySelectorAll('.dom-node-demo .el');

anime({
  targets: elements,
  translateX: 270
});

JAVASCRIPT對象

以JavaScript對象作為動畫目標,這個對象必須含有至少一個數字屬性。

var logEl = document.querySelector('.battery-log');

var battery = {
  charged: '0%',
  cycles: 120
}

anime({
  targets: battery,
  charged: '100%',
  cycles: 130,
  round: 1,
  easing: 'linear',
  update: function() {
    logEl.innerHTML = JSON.stringify(battery);
  }
});

數組

以數組作為動畫目標。

var el = document.querySelector('.mixed-array-demo .el-01');

anime({
  targets: [el, '.mixed-array-demo .el-02', '.mixed-array-demo .el-03'],
  translateX: 250
});

可動畫的目標屬性

「大多數CSS屬性都會導致布局更改或重新繪製,並會導致動畫不穩定。因此儘可能優先考慮opacity和CSS transforms。」

所有的transforms屬性

包含數值的任何Object屬性都可以設置動畫。

任何包含數值的DOM屬性都可以設置動畫。

與任何其他DOM屬性一樣,包含至少一個數值的所有SVG屬性都可以設置動畫。

動畫基礎參數

定義動畫的持續時間(以毫秒為單位)。

定義動畫的延遲(以毫秒為單位)。

在動畫結束時以毫秒為單位添加一些額外時間。

定義動畫的時間曲線。

將值向上捨入為x小數。

使用Object作為值為動畫的每個屬性定義特定參數。未在Object中指定的其他屬性繼承自主動畫。

為動畫的每個目標和屬性設置不同的值。function 接受三個參數:

ARGUMENTSINFOStarget當前動畫目標元素index動畫目標的索引targetsLength總動畫目標數
anime({
  targets: '.function-based-params-demo .el',
  translateX: 270,
  direction: 'alternate',
  loop: true,
  delay: function(el, i, l) {
    return i * 100;
  },
  endDelay: function(el, i, l) {
    return (l - i) * 100;
  }
});

方向和循環

定義動畫的方向。

ACCEPTSINFOSnormal正方向動畫reverse反方向動畫alternate往返

定義動畫的往複次數。

ACCEPTSINFOSNumber循環次數true無限循環

定義動畫是否應自動啟動。

ACCEPTSINFOStrue開啟自動播放false關閉自動播放動畫賦值方式

如果原始值具有單位,則它將自動添加到動畫值中。

強制動畫使用某個單位並自動轉換初始目標值。

添加,減去或乘以原始值。

ACCEPTSEFFECTEXAMPLE'+='Add'+=100''-='Substract'-=2turn''*='Multiply'*=10'

anime.js 接受並轉換Haxadecimal(十六進位),RGB,RGBA,HSL和HSLA顏色值。

強制動畫以指定值開始。

為動畫的每個目標和屬性設置不同的值。

ARGUMENTSINFOStarget當前動畫目標元素index動畫目標的索引targetsLength總動畫目標數關鍵幀(KEYFRAMES)

動畫關鍵幀是使用keyframes屬性中的數組定義的。

「如果關鍵幀內沒有指定duration(持續時間),則每個關鍵幀的持續時間將等於動畫總持續時間除以關鍵幀數。」

anime({
  targets: '.animation-keyframes-demo .el',
  keyframes: [
    {translateY: -40},
    {translateX: 250},
    {translateY: 40},
    {translateX: 0},
    {translateY: 0}
  ],
  duration: 4000,
  easing: 'easeOutElastic(1, .8)',
  loop: true
});

與動畫關鍵幀類似,屬性關鍵幀是使用屬性對象的Array定義的。屬性關鍵幀允許重疊動畫,因為每個屬性都有自己的關鍵幀數組。

動畫控制

播放暫停的動畫,如果autoplay 參數設置為false,則啟動動畫。

animation.play();
animation.pause();

從動畫的初始值重新開始動畫。

animation.restart();

反轉動畫的方向。

animation.reverse();

跳轉到特定時間(以毫秒為單位)。

animation.seek(timeStamp);

timeline.play();
timeline.pause();
timeline.restart();
timeline.seek(timeStamp);

時間曲線(EASING)

不對動畫應用任何緩動時間曲線。對於opacity和colors過渡很有用。

easing: 'linear'

easing: 'easeInOutSine'

使用您自己的自定義立方Bézier曲線cubicBezier(x1, y1, x2, y2).

easing: 'cubicBezier(.5, .05, .1, .3)'

類似於彈簧效果

easing: 'spring(mass, stiffness, damping, velocity)'

彈跳效果

easing: 'easeOutElastic(amplitude, period)'

easing: 'steps(numberOfSteps)'

通過基於function based value返回自定義時間曲線函數。

easing: function() { return function(time) { return time * i} }

ANIME.JS方法

從正在運行的動畫或時間軸中刪除目標。targets參數接受與targets 屬性相同的值。

anime.remove(targets)

返回元素的原始值。

anime.get(target, propertyName, unit);

立即將值設置為指定的目標。

anime.set(targets, {property: value});

返回特定範圍內的隨機整數。anime.random(minValue, maxValue);

使用外部requestAnimationFrame循環播放動畫。「不要忘記將autoplay參數設置為false以防止anime.js內置RAF循環啟動。」

animation.tick(time)

返回當前正在運行的所有活動anime.js實例的Array。

anime.running

「感謝閱讀,詳細文檔請閱讀anime.js官網文檔」


相關焦點

  • 前端高效開發必備的 js 庫梳理
    作者: 徐小夕 來源:趣談前端之前有很多人問學好前端需要學習哪些 js 庫, 主流框架應該學 vue 還是 react ? 針對這些問題, 筆者來說說自己的看法和學習總結。比如說你對移動端比較感興趣, 工作中也剛好涉及到一些技術的應用,那麼我可以專門研究移動端相關的技術和框架, 又或者你對企業後臺/中臺產品感興趣, 比較喜歡開發PC端項目, 那麼我們可以專門研究這種類型的js庫或者框架, 接下來筆者也是按照不同前端業務的需求, 來整理一份能快速應用到工作中的js庫, 以提高大家的開發效率。
  • 介紹幾個開發前端動畫不得不學的動畫庫
    基於 CSS3 的動畫庫(http://anijs.github.io/)
  • 前端高效開發不得不知道的一些JavaScript庫!
    網址:https://www.minimamente.com/project/magic/move.js 推薦指數:⭐️⭐️一個小型的JavaScript庫,通過JS來控制一系列的CSS動畫順序執行,使CSS3動畫變得非常簡單和優雅。
  • 前端技術-Rollup.js模塊打包器
    :龐大的插件庫,並支持自定義插件開發· 龐大的插件庫· 打包速度快、配置簡單開始RollupRollup.js的安裝安裝Rollup前,首先需要安裝Node.js。*更多命令行參數請參考官方文檔:命令行參數Rollup.js配置文件雖然通過命令行,我們可以使用rollup所有的功能。但是因為自定義打包需要對多種插件、環境進行配置,全部採用命令並不是一種聰明的手段。這裡建議使用Rollup配置文件,方便設置的管理和統一。
  • 功能強大的 JS 文件上傳庫:FilePond
    看了效果圖和功能介紹,是不是有些手癢了。接下來就是實戰操作部分,大家可以跟著文章一步步的把這個庫使用起來,點亮你的文件上傳技能點!實戰操作 下面我們將一步步的講解如何使用 FilePond 這個庫。我們採用的是最簡單的 CDN 引用方式,方便大家能夠快速體檢其魅力(複製代碼便可查看效果),接著會深入講解每個插件的功能,最終編寫了一個組合了幾個插件的示例及運行效果展示。Tips:解釋說明均在代碼中以注釋方式展示,請大家注意閱讀。
  • 工作中經常用到 github 上優秀、實用、輕量級、無依賴的插件和庫
    開源的基礎上進行優化的一款插件,簡單好用,輕巧高性能,功能強大,API通俗易懂,是一款優秀的scroll插件,拋棄原生滾動條,從現在做起。/projects/jquery.slick大小:40 KB功能介紹: slick 是一個功能異常強大的一個圖片滑動切換效果庫,接口豐富,支持各種動畫和各種樣式的切換滑動,唯一的缺點就是基於jQuery,基本廢了,現在沒人喜歡用jQuery,該淘汰了。。。
  • 盤點7個強大的Node.js框架
    Node.js是由Ryan Dahl於2009年創建的,它是一個開源的跨平臺運行時環境,用於開發伺服器端和網絡應用程式,這篇文章的重點是Node.js框架,小編會給大家簡要盤點7個強大的Node框架,希望對大家有幫助。
  • 「首席架構師推薦」一系列很棒的的瀏覽器端JavaScript庫資源(5)
    範圍滑塊Ion.RangeSlider - 功能強大且易於定製的範圍滑塊,具有多種選項和皮膚支持。jQRangeSlider - 支持日期的JavaScript滑塊選擇器。rangeslider.js - HTML5輸入範圍滑塊元素polyfill。表單小部件輸入typeahead.js - 一個快速且功能齊全的自動完成庫。
  • 讓人心動的jQuery插件和HTML5動畫(附原碼)
    3、jQuery自定義Loading動畫插件spin.jsspin.js是一款基於jQuery的Loading動畫插件,和之前分享的CSS3 Loading動畫應用不同的是,這款Loading動畫是基於jQuery的,意味著兼容性更好;還有就是這款Loading動畫是可以自定義參數的,比如半徑、旋轉速度等都可以通過右側的滑杆來設置。
  • 【乾貨】2016年31款輕量高效的開源JavaScript插件和庫(上)
    其實,其中也有不少輕量級的插件和庫,它們不僅輕巧有用,而且不會影響網站的性能。本文就為大家整理了2016年以來30多款輕量級Javascript插件和庫的列表,這些工具服務於特定的目標,並且它們能夠非常有效和高效地實現目標。不管你想創建一個圖片庫、一個滑動效果,個性化菜單還是其他接口元素,你都可以用這些插件和庫輕易的實現。
  • 前端組件/庫打包利器rollup使用與配置實戰
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫目前主流的前端框架vue和react都採用rollup來打包,為了探索rollup的奧妙,接下來就讓我們一步步來探索,並基於rollup搭建一個庫打包腳手架,來發布自己的庫和組件。
  • 【博文精選】使用After Effects輸出代碼原生動畫
    對於UI開發等前端設計與開發的同事來說,gif動畫文檔數據量大,容易導致加載問題,使用代碼製作動畫的難度高、工作量大,且動畫的設計還原度多少會有偏差,工作過程中需要多次溝通與返工,也是不勝其煩。本文將介紹一種使用AE插件bodymovin輸出HTML5/Android/iOS原生動畫的方法。
  • 【第1350期】2018年值得關注的10大JavaScript動畫庫
    八年了,Three JS 仍然是一個強大的動畫工具。Three JS 依賴於WebGL,可以用來構建瀏覽器端酷炫的3D計算機圖形。它的功能包括但不限於浮雕效果,透視和正交相機效果,幾何工具,如平面,立方體,球體,環面。然而,這個庫有個缺點,就是一些開發人員發現它使用起來很慢。安裝:使用NPM,可以使用以下命令安裝Three JS。
  • 2020 十大 JavaScript 圖像處理庫
    幸運的是,有許多庫可以使這事變得非常簡單。以下是我最喜歡的不同類別的庫。如果你發現有用的東西,嘗試將其封裝成所選框架的組件。通過這種方式,你將擁有一個具備聲明式 API 的可復用組件,並隨時可用。1. Pica此插件可助你減小大圖的上傳大小,從而節省上傳時間。
  • Creator插件系統初探:我是怎麼實現gif轉anim動畫的
    但是由於文檔有點簡陋,所以很難實現像樣的功能。而且缺少整體的知識體系說明,容易摸不清頭腦。所以在參考了小王子的插件開發教程之後,決定自己搞一款插件試試水,了解一下插件開發的知識體系。然後就可以用我們最熟悉的方式去寫插件功能了。怎麼實現gif-to-animation插件就gif轉creator幀動畫這個插件,要實現這個功能分三步。
  • WEB 前端開發插件整理
    雙 select http://loudev.com3.selectbox http://aui.github.io/popupjs/doc/selectbox.html文字工具插件1.簡繁體轉換 https://github.com/BYVoid/OpenCC2.拼音 https://github.com/hotoo/pinyin
  • 十大新興前端框架大盤點
    作者 | 司徒正美責編 | 伍杏玲2019年在整體上,前端的主流框架沒有太大的變化,業務代碼仍由三大框架(React、Vue、Angular)所主宰著,打包工具一般仍使用webpack、Rollup.js,狀態管理器還是Redux、MobX。
  • 分享一款帶排序功能的瀑布流插件sortableJs
    今天跟大家分享一款瀑布流插件【sortableJs】。它是一款帶排序功能的js masonry瀑布流插件。
  • ​​【第 244 期】小智周末學習發現了 10 個好用JavaScript圖像處理庫
    組合圖形(包括組合圖形、圖形文字、圖片等)等一系列功能。簡單來說我們可以通過使用Fabric從而以較為簡單的方式實現較為複雜的Canvas功能還可以使用Fabric.js庫更改這些對象的某些屬性,例如它們的顏色,透明度,網頁上的深度位置,或選擇這些對象的組。
  • 《前端5分鐘》之使用純css實現網站換膚和焦點圖切換動畫
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫今天我們來繼續復盤一些工作中常用的css技巧和知識,以便我們可以更加優雅的用css實現富有動感的網站.