<div class="intro">
<p>The Anim Utility provides the ability to animate changes to style properties. Advanced easing equations are provided for more interesting animated effects.</p>
<p><strong>NOTE:</strong> Depending on which features are required, you may want to consider using the <a href="../transition/">Transition Utility</a> as an alternative to Anim. The Transition Utility isn't as feature rich as Anim, but it leverages native CSS Transitions when possible, provides a smaller payload, and can be hardware-accelerated.</p>
</div>
{{>getting-started}}
<div>
<h3 id="instantiating">Creating an Animation Object</h3>
<p>Your Animation implementation will consist of one or more instances of the <code>Anim</code>.</p>
<p>To create an <code>Anim</code> instance on your page, pass it a configuration object including the <code>node</code> or selector query for the node that you wish to animate and a <code>to</code> containing the properties you wish to animate.</p>
```
var myAnim = new Y.Anim({
node: '#demo',
to: {
width: 0,
height: 0
}
});
```
<p>To begin the actual animation, call the <code>run</code> method on your <code>Anim</code> instance.</p>
```
myAnim.run();
```
<p>See <a href="../api/module_anim.html">the API documentation for the Anim object</a> for more information about its methods and properties.</p>
<h2 id="using">Using Animation</h2>
<h3 id="attributes">Accessing Animation Attributes</h3>
<p>In addition to passing a configuration object to the <code>Anim</code> constructor, you can access the attributes of your <code>Anim</code> instance via the <code>set</code> and <code>get</code> methods.</p>
```
var myAnim = new Y.Anim({
node: '#demo',
to: {
width: 0,
height: 0
}
});
```
<h3 id="anim-to">Setting a To Value</h3>
<p>A <code>node</code> attribute and a <code>to</code> attribute containing one or more properties to animate are the minimum requirements for running an animation.</p>
<p>The value of a <code>to</code> can optionally be a function. If a function is used, it receives the <code>node</code> as its only argument. The return value of the function becomes the <code>to</code> value for that <code>run</code> of the animation.</p>
```
var myAnim = new Y.Anim({
node: '#demo',
to: {
width: function(node) {
return node.get('offsetWidth') / 2;
},
height: 0
}
});
```
<h3 id="anim-from">Setting a From Value</h3>
<p>Use the optional <code>from</code> attribute to start the animation from a specific value. When <code>from</code> is omitted, the current value is used.</p>
<p>Like the <code>to</code> attribute, the value of a <code>from</code> property can optionally be a function. If a function is used, it receives the <code>node</code> as its only argument. The return value of the function becomes the <code>from</code> value for that <code>run</code> of the animation.</p>
```
var myAnim = new Y.Anim({
node: '#demo',
from: {
width: 0,
height: function(node) {
return node.get('winHeight');
}
},
to: {
width: 0,
height: 0
}
});
```
<h3 id="anim-events">Listening for Events<a name="events"></a></h3>
<p>The Animation Utility defines events useful for hooking into the various stages of an animation. The <code>on</code> method is used to attach event listeners.</p>
```
var myAnim = new Y.Anim({
node: '#demo',
to: {
width: 0,
height: 0
}
});
myAnim.on('end', function() {
myAnim.get('node').addClass('yui-hidden');
});
```
</div>