Package Exports
- @polymer/neon-animation
- @polymer/neon-animation/animations/cascaded-animation
- @polymer/neon-animation/animations/fade-in-animation.js
- @polymer/neon-animation/animations/fade-out-animation
- @polymer/neon-animation/animations/fade-out-animation.js
- @polymer/neon-animation/animations/hero-animation.js
- @polymer/neon-animation/animations/scale-down-animation
- @polymer/neon-animation/animations/scale-down-animation.js
- @polymer/neon-animation/animations/scale-up-animation
- @polymer/neon-animation/animations/scale-up-animation.js
- @polymer/neon-animation/animations/slide-down-animation
- @polymer/neon-animation/animations/slide-down-animation.js
- @polymer/neon-animation/animations/slide-from-bottom-animation
- @polymer/neon-animation/animations/slide-from-bottom-animation.js
- @polymer/neon-animation/animations/slide-from-left-animation.js
- @polymer/neon-animation/animations/slide-from-right-animation
- @polymer/neon-animation/animations/slide-from-right-animation.js
- @polymer/neon-animation/animations/slide-left-animation.js
- @polymer/neon-animation/animations/slide-right-animation
- @polymer/neon-animation/animations/slide-right-animation.js
- @polymer/neon-animation/animations/transform-animation.js
- @polymer/neon-animation/neon-animatable
- @polymer/neon-animation/neon-animatable.js
- @polymer/neon-animation/neon-animated-pages
- @polymer/neon-animation/neon-animated-pages.js
- @polymer/neon-animation/neon-animation
- @polymer/neon-animation/neon-animation-behavior
- @polymer/neon-animation/neon-animation-behavior.js
- @polymer/neon-animation/neon-animation-runner-behavior
- @polymer/neon-animation/neon-animation-runner-behavior.js
- @polymer/neon-animation/neon-animation.js
- @polymer/neon-animation/neon-animations.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@polymer/neon-animation) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
neon-animation
neon-animation is a suite of elements and behaviors to implement pluggable animated transitions for Polymer Elements using Web Animations. Please note that these elements do not include the web-animations polyfill.
See: Documentation, Demo.
See the guide for detailed usage.
Usage
Installation
Element:
npm install --save @polymer/neon-animationPolyfill:
npm install --save web-animations-jsIn an HTML file
NeonAnimatableBehavior
Elements that can be animated by NeonAnimationRunnerBehavior should implement the NeonAnimatableBehavior behavior, or NeonAnimationRunnerBehavior if they're also responsible for running an animation.
In a Polymer 3 element
import {PolymerElement, html} from '@polymer/polymer';
import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js';
import {NeonAnimatableBehavior} from '@polymer/neon-animation/neon-animatable-behavior.js';
class SampleElement extends mixinBehaviors([NeonAnimatableBehavior], PolymerElement) {
static get template() {
return html`
<style>
:host {
display: block;
}
</style>
<slot></slot>
`;
}
}
customElements.define('sample-element', SampleElement);NeonAnimationRunnerBehavior
In a Polymer 3 element
import {PolymerElement, html} from '@polymer/polymer';
import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js';
import {NeonAnimationRunnerBehavior} from '@polymer/neon-animation/neon-animation-runner-behavior.js';
import '@polymer/neon-animation/animations/scale-down-animation.js';
class SampleElement extends mixinBehaviors([NeonAnimationRunnerBehavior], PolymerElement) {
static get template() {
return html`
<div>this entire element will be animated after one second</div>
`;
}
connectedCallback() {
super.connectedCallback();
// must be set here because properties is static and cannot reference "this"
this.animationConfig = {
// provided by neon-animation/animations/scale-down-animation.js
name: 'scale-down-animation',
node: this,
};
setTimeout(() => this.playAnimation(), 1000);
}
}
customElements.define('sample-element', SampleElement);<neon-animatable>
A simple element that implements NeonAnimatableBehavior.
In an html file
<html>
<head>
</head>
<body>
<neon-animatable id="animatable">
<div>this entire element and its parent will be animated after one second</div>
</neon-animatable>
<runner-element></runner-element>
<script type="module">
import {PolymerElement} from '@polymer/polymer';
import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js';
import {NeonAnimationRunnerBehavior} from '@polymer/neon-animation/neon-animation-runner-behavior.js';
import '@polymer/neon-animation/neon-animatable.js';
import '@polymer/neon-animation/animations/scale-down-animation.js';
const animatable = document.getElementById('animatable');
class SampleElement extends mixinBehaviors([NeonAnimationRunnerBehavior], PolymerElement) {
connectedCallback() {
super.connectedCallback();
this.animationConfig = {
// provided by neon-animation/animations/scale-down-animation.js
name: 'scale-down-animation',
// node is node to animate
node: animatable,
}
setTimeout(() => this.playAnimation(), 1000);
}
}
customElements.define('runner-element', SampleElement);
</script>
</body>
</html>In a Polymer 3 element
import {PolymerElement, html} from '@polymer/polymer';
import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js';
import {NeonAnimationRunnerBehavior} from '@polymer/neon-animation/neon-animation-runner-behavior.js';
import '@polymer/neon-animation/neon-animatable.js';
import '@polymer/neon-animation/animations/scale-down-animation.js';
class SampleElement extends mixinBehaviors([NeonAnimationRunnerBehavior], PolymerElement) {
static get template() {
return html`
<div>this div will not be animated</div>
<neon-animatable id="animatable">
<div>this div and its parent will be animated after one second</div>
</neon-animatable>
`;
}
connectedCallback() {
super.connectedCallback();
// must be set here because properties is static and cannot reference "this"
this.animationConfig = {
// provided by neon-animation/animations/scale-down-animation.js
name: 'scale-down-animation',
node: this.$.animatable,
};
setTimeout(() => this.playAnimation(), 1000);
}
}
customElements.define('sample-element', SampleElement);<neon-animated-pages>
neon-animated-pages manages a set of pages and runs an animation when
switching between them.
In an html file
<html>
<head>
<script type="module">
import '@polymer/neon-animation/neon-animated-pages.js';
import '@polymer/neon-animation/neon-animatable.js';
import '@polymer/neon-animation/animations/slide-from-right-animation.js';
import '@polymer/neon-animation/animations/slide-left-animation.js';
</script>
</head>
<body>
<neon-animated-pages
id="pages"
selected="0"
entry-animation="slide-from-right-animation"
exit-animation="slide-left-animation">
<neon-animatable>1</neon-animatable>
<neon-animatable>2</neon-animatable>
<neon-animatable>3</neon-animatable>
<neon-animatable>4</neon-animatable>
<neon-animatable>5</neon-animatable>
</neon-animated-pages>
<button onclick="increase()">+</button>
<button onclick="decrease()">-</button>
<script>
const pages = document.getElementById('pages');
function increase() { pages.selected = pages.selected + 1 % 5; };
function decrease() { pages.selected = (pages.selected - 1 + 5) % 5; };
</script>
</body>
</html>In a Polymer 3 element
import {PolymerElement, html} from '@polymer/polymer';
import '@polymer/neon-animation/neon-animated-pages.js';
import '@polymer/neon-animation/neon-animatable.js';
import '@polymer/neon-animation/animations/slide-from-right-animation.js';
import '@polymer/neon-animation/animations/slide-left-animation.js';
class SampleElement extends PolymerElement {
static get template() {
return html`
<neon-animated-pages
id="pages"
selected="0"
entry-animation="slide-from-right-animation"
exit-animation="slide-left-animation">
<neon-animatable>1</neon-animatable>
<neon-animatable>2</neon-animatable>
<neon-animatable>3</neon-animatable>
<neon-animatable>4</neon-animatable>
<neon-animatable>5</neon-animatable>
</neon-animated-pages>
<button on-click="increase">+</button>
<button on-click="decrease">-</button>
`;
}
increase() {
this.$.pages.selected = this.$.pages.selected + 1 % 5;
}
decrease() {
this.$.pages.selected = (this.$.pages.selected - 1 + 5) % 5;
}
}
customElements.define('sample-element', SampleElement);In a Polymer 3 element
import {PolymerElement, html} from '@polymer/polymer';
import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class.js';
import {NeonAnimationRunnerBehavior} from '@polymer/neon-animation/neon-animation-runner-behavior.js';
import '@polymer/neon-animation/animations/neon-animatable.js';
import '@polymer/neon-animation/animations/scale-down-animation.js';
class SampleElement extends mixinBehaviors([NeonAnimationRunnerBehavior], PolymerElement) {
static get template() {
return html`
<div>this div will not be animated</div>
<neon-animatable id="animatable">
<div>this div and its parent will be animated after one second</div>
</neon-animatable>
`;
}
connectedCallback() {
super.connectedCallback();
// must be set here because properties is static and cannot reference "this"
this.animationConfig = {
// provided by neon-animation/animations/scale-down-animation.js
name: 'scale-down-animation',
node: this.$.animatable,
};
setTimeout(() => this.playAnimation(), 1000);
}
}
customElements.define('sample-element', SampleElement);Contributing
If you want to send a PR to this element, here are the instructions for running the tests and demo locally:
Installation
git clone https://github.com/PolymerElements/neon-animation
cd neon-animation
npm install
npm install -g polymer-cliRunning the demo locally
polymer serve --npm
open http://127.0.0.1:<port>/demo/Running the tests
polymer test --npm