Socket
Socket
Sign inDemoInstall

aframe-animation-component

Package Overview
Dependencies
1
Maintainers
1
Versions
35
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    aframe-animation-component

Animations in A-Frame using anime.js


Version published
Weekly downloads
978
increased by2.62%
Maintainers
1
Install size
733 kB
Created
Weekly downloads
 

Readme

Source

aframe-animation-component

An animation component for A-Frame using anime.js.

Also check out the animation-timeline component for defining and orchestrating timelines of animations.

animation

Latest version requires A-Frame v0.8.0.

API

Properties
PropertyDescriptionDefault ValueValues
propertyProperty to animate. Can be a component name, a dot-delimited property of a component (e.g., material.color), or a plain attribute.
isRawPropertyFlag to animate an arbitrary object property outside of A-Frame components for better performance. If set to true, for example, we can set property to like components.material.material.opacity. If property starts with components or object3D, this will be inferred to true.false
fromInitial value at start of animation. If not specified, the current property value of the entity will be used (will be sampled on each animation start). It is best to specify a from value when possible for stability.null
toTarget value at end of animation.null
typeRight now only supports color for tweening isRawProperty color XYZ/RGB vector values.''
delayHow long (milliseconds) to wait before starting.0
dirWhich dir to go from from to to.normalalternate, reverse
durHow long (milliseconds) each cycle of the animation is.1000
easingEasing function of animation. To ease in, ease out, ease in and out.easeInQuadSee easings
elasticityHow much to bounce (higher is stronger).400
loopHow many times the animation should repeat. If the value is true, the animation will repeat infinitely.0
roundWhether to round values.false
startEventsComma-separated list of events to listen to trigger play/restart. Animation will not autoplay if specified.null
pauseEventsComma-separated list of events to listen to trigger pause. Can be resumed with resumeEvents.null
resumeEventsComma-separated list of events to listen to trigger resume after pausing.null
autoplayWhether or not the animation should autoplay. Should be specified if the animation is defined for the animation-timeline component.null
enabledToggle startEvents effect.true
Multiple Animations

Base name is animation. We can attach multiple animations to one entity by name-spacing the component with double underscores (__):

<a-entity animation="property: rotation"
          animation__2="property: position"
          animation__color="property: material.color"></a-entity>
Easings
easeIneaseOuteaseInOut
easeInQuadeaseOutQuadeaseInOutQuad
easeInCubiceaseOutCubiceaseInOutCubic
easeInQuarteaseOutQuarteaseInOutQuart
easeInQuinteaseOutQuinteaseInOutQuint
easeInSineeaseOutSineeaseInOutSine
easeInExpoeaseOutExpoeaseInOutExpo
easeInCirceaseOutCirceaseInOutCirc
easeInBackeaseOutBackeaseInOutBack
easeInElasticeaseOutElasticeaseInOutElastic
Events
PropertyDescription
animationbeginAnimation began. Event detail contains name of animation.
animationcompleteAnimation completed. Event detail contains name of animation.
Members
MemberDescription
animationanime.js object.
Using anime.js Directly

anime is a popular and powerful animation engine. The component prefers to do just basic tweening and touches only the surface of what anime can do (e.g., timelines, motion paths, progress, seeking). If we need more animation features, create a separate component that uses anime.js directly. anime is accessible via AFRAME.anime.

Read through and explore the anime.js documentation and website.

Installation

Browser

Install and use by directly including the browser files:

<head>
  <title>My A-Frame Scene</title>
  <script src="https://aframe.io/releases/0.8.0/aframe.min.js"></script>
  <script src="https://unpkg.com/aframe-animation-component@^4.1.2/dist/aframe-animation-component.min.js"></script>
</head>

<body>
  <a-scene>
    <a-entity geometry="primitive: box" material="color: black"
              animation__color="property: material.color; dir: alternate; dur: 1000;
                                easing: easeInSine; loop: true; to: #FFF">
    </a-entity>

    <a-entity geometry="primitive: box" material="color: orange"
              animation__fadein="property: material.opacity; dur: 100;
                                  easing: linear; from 0; to: 1; startEvents: fadein"
              animation__fadeout="property: material.opacity; dur: 100;
                                  easing: linear; from 1; to: 0; startEvents: fadeout"
    </a-entity>

    <a-cylinder color="#F55" radius="0.1"
                animation="property: color; dir: alternate; dur: 1000;
                           easing: easeInSine; loop: true; to: #5F5"
                animation__scale="property: scale; dir: alternate; dur: 200;
                           easing: easeInSine; loop: true; to: 1.2 1 1.2"
                animation__yoyo="property: position; dir: alternate; dur: 1000;
                                 easing: easeInSine; loop: true; to: 0 2 0">
    </a-cylinder>

  </a-scene>
</body>
npm

Install via npm:

npm install aframe-animation-component

Then register and use.

require('aframe');
require('aframe-animation-component');

Versus <a-animation>

I expect to deprecate <a-animation> in favor for this component.

  • Imperative Ergonomics: Imperatively set animations and all of its properties with a single setAttribute call. With <a-animation>, we must do createElement, multiple setAttributes, appendChild, and addEventListener('loaded').
  • Performance: The animation component takes advantage of shortcut updates of positions, rotations, and scales. In later versions of A-Frame, A-Frame allows us to performantly modify these transformation properties without going through the whole .setAtttribute flow.
  • Synchronous: Setting a component is synchronous, meaning it takes effect immediately. With <a-animation>, we must wait for it to append to the DOM and register a callback listener.
  • Consistency with the Framework: The animation component fits into A-Frame's entity-component-system framework. The <a-animation> tag is the only outlier in which we must use a DOM element to modify an entity.
  • Simpler API: The animation component uses anime.js, a popular and simple JavaScript animation library. <a-animation>'s API is loosely based off of Web Animations draft specification which is overly complex.
  • Easier Maintenance: The animation component uses A-Frame's component API as well as anime.js. <a-animation> uses the Custom Element polyfill directly with tween.js. anime.js's features makes the animation codebase much slimmer (140 vs 550 lines of code).
  • Features: The animation component has the features of the newly popular anime.js library (e.g., color interpolation).
  • Faster Development: Being detached from the A-Frame core library means faster iteration of features. Due to being easier to maintain, having more features, and not being tied to A-Frame versions, we can add things quickly such as timeline support.
  • anime.js: anime.js has great performance over Tween.js and tons of great animation features.
  • Less Bugs: <a-animation> has not been touched in ages. This component has lesss issues filed against it, and people usually end up switching to the component once they run into issues with <a-animation>.

Keywords

FAQs

Last updated on 25 Sep 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc