Easy Slide-in Menus using YUI 3

From:
andrew cooke <andrew@...>

Date:
Mon, 26 Jul 2010 00:40:07 -0400

YUI 3 is amazing. It looks terrifyingly complex, but once you get into it,
you can do complex things trivially. I use jQuery at work, and in comparison,
YUI 3 feels like it was written by software engineers rather than people
hacking web pages.
For example, here's how to make a menu that shows as a tab on the right-hand
side of the page that "zooms in" (to the left) when you mouse-over.
First, place the menu in a div in the HTML:
<div class="menu" id="menu-1">
<img src="menu-icon-small.png"/>
<ul>
<li>Foo</li>
<li>Bar</li>
<li>Foo</li>
<li>Bar</li>
</ul>
</div>
Next, add some CSS (probably ina separate stylsheet) so that the icon is on
the left, and will be visible, but the rest of the div is off the page to the
right:
ul {
margin: 10px;
margin-left: 40px;
}
li {
list-style-type: none;
list-style-position: outside;
margin-top: 4px;
margin-bottom: 4px;
}
div.menu {
position: fixed;
right: -278px;
width: 300px;
border: 1px solid #c0c0c0;
border-right: none;
-moz-border-radius: 4px;
background: white;
}
div#menu-1 {
top: 50px;
}
div.menu img {
margin: 1px;
float: left;
}
Import the YUI magic (in the HTML header).
<script type="text/javascript"
src="http://yui.yahooapis.com/combo?3.1.1/build/yui/yui-min.js"></script>
and define the animation:
<script type="text/javascript">
YUI().use('event-mouseenter', 'console', 'anim', function(Y) {
/* new Y.Console().render(); */
var open = new Y.Anim({node: '#menu-1', to: {right: 0},
easing: Y.Easing.easeOut});
var close = new Y.Anim({node: '#menu-1', to: {right: -278},
easing: Y.Easing.easeIn});
Y.on("mouseenter", function (e) {open.run();}, "#menu-1");
Y.on("mouseleave", function (e) {close.run();}, "#menu-1");
});
</script>
and that's it!
The script above sets up the events and defines animations for the div so that
it moves into and out of sight. The "Easing" part even makes it move in a
"natural" manner (it slows down as it extends fully).
Andrew