2 Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
3 This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
4 The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
5 The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
6 Code distributed by Google as part of the polymer project is also
7 subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
12 `<core-transition>` is an abstraction of an animation. It is used to implement pluggable
13 transitions, for example in `<core-overlay>`. You can extend this class to create a custom
14 animation, instantiate it, and import it where you need the animation.
16 All instances of `<core-transition>` are stored in a single database with `type=transition`.
17 For more about the database, please see the documentation for `<core-meta>`.
19 Each instance of `<core-transition>` objects are shared across all the clients, so you should
20 not store state information specific to the animated element in the transition. Rather, store
27 <polymer-element name="my-transition" extends="core-transition">
30 node.style.transition = 'opacity 1s ease-out';
31 node.style.opacity = 0;
36 <my-transition id="my-fade-out"></my-transition>
38 my-transition-demo.html:
40 <link href="components/core-meta/core-meta.html" rel="import">
41 <link href="my-transition.html" rel="import">
43 <div id="animate-me"></div>
46 // Get the core-transition
47 var meta = document.createElement('core-meta');
48 meta.type = 'transition';
49 var transition = meta.byId('my-fade-out');
52 var animated = document.getElementById('animate-me');
53 transition.go(animated);
56 @group Polymer Core Elements
57 @element core-transition
63 Fired when the animation finishes.
65 @event core-transitionend
66 @param {Object} detail
67 @param {Object} detail.node The animated node
70 <link rel="import" href="../core-meta/core-meta.html">
72 <polymer-element name="core-transition" extends="core-meta">
75 Polymer('core-transition', {
83 * @param {Node} node The node to apply the animation on
84 * @param {Object} state State info
86 go: function(node, state) {
91 * Set up the animation. This may include injecting a stylesheet,
92 * applying styles, creating a web animations object, etc.. This
95 * @param {Node} node The animated node
97 setup: function(node) {
101 * Tear down the animation.
104 * @param {Node} node The animated node
106 teardown: function(node) {
110 * Called when the animation completes. This function also fires the
111 * `core-transitionend` event.
114 * @param {Node} node The animated node
116 complete: function(node) {
117 this.fire('core-transitionend', null, node);
121 * Utility function to listen to an event on a node once.
124 * @param {Node} node The animated node
125 * @param {string} event Name of an event
126 * @param {Function} fn Event handler
127 * @param {Array} args Additional arguments to pass to `fn`
129 listenOnce: function(node, event, fn, args) {
131 var listener = function() {
132 fn.apply(self, args);
133 node.removeEventListener(event, listener, false);
135 node.addEventListener(event, listener, false);