This example shows how to use a Dial widget to animate an image sprite.
Drag the Dial handle, or use the keyboard arrow keys to see the duck image "animate".
Lot #562
+Duck Decoy - Thomas Jefferson
++ Hand carved and signed by Thomas Jefferson. + circa 1785. Native hardwoods, stains, pigments. + Glass bead eyes. +
++ Opening bid $93,000 +
+The Image Sprite
+![]()
The Markup
+The <div id="duck"></div> element will have the sprite as its background-image.
+
The <div id="demo"></div> element will contain the dial.
+Note: be sure to add the yui3-skin-sam classname to the
+page's <body> element or to a parent element of the widget in order to apply
+the default CSS skin. See Understanding Skinning.
+
<body class="yui3-skin-sam"> <!-- You need this skin class -->+ + +
<div class="container"> + <div id="duck"></div> + <div id="demo"></div> + <div id="text"> + <h3>Lot #562</h3> + <h2>Duck Decoy - Thomas Jefferson</h2> + <p> + Hand carved and signed by Thomas Jefferson. + circa 1785. Native hardwoods, stains, pigments. + Glass bead eyes. + </p> + <p> + Opening bid $93,000 + </p> + </div> +</div>+ +
The JavaScript
+The stepsPerRevolution attribute of the Dial
+is given a value equal to the number of frames in the sprite.
+
+On valueChange of the dial, the background-position of <div id="duck">
+is changed to a new multiple of the
+width of one frame in the sprite.
+
<script type="text/javascript">
+ YUI().use("dial", function(Y) {
+ var oneFrameWidth = 300,
+ framesInSprite = 13;
+ var dial = new Y.Dial({
+ min: 0,
+ max: 26000,
+ value: 13000, // initial value in the middle of a large range allows rotation both ways
+ minorStep: 1,
+ majorStep: 2,
+ stepsPerRevolution: framesInSprite,
+ diameter: 150
+ });
+ dial.render('#demo');
+
+ // Reposition the duck sprite background image
+ dial.on( "valueChange", function(e){
+ // Handle values greater than one revolution
+ var moduloValue = (e.newVal % framesInSprite);
+
+ Y.one('#duck').setStyle('backgroundPosition', (moduloValue * -oneFrameWidth) + 'px 0px');
+ }, '#duck' );
+ });
+</script>
+
+Complete Example Source
+<style>
+
+ .example {
+ background-color: #59554F;
+ text-align: center;
+ }
+
+ .example .container {
+ text-align: left;
+ position: relative;
+ width: 554px;
+ margin: 10px auto;
+ padding: 0;
+ font-family: georgia;
+ }
+
+ .example #demo {
+ position: absolute;
+ top: -10px;
+ left: 350px;
+ }
+
+ .example #duck {
+ width:300px;
+ height:188px;
+ background:url(../assets/dial/images/sprite_duck.jpg) no-repeat;
+ background-position: 0 0;
+ border:solid 1px #958A71;
+ -moz-box-shadow:7px 7px 10px rgba(0,0,0,0.3);
+ -webkit-box-shadow:7px 7px 10px rgba(0,0,0,0.3);
+ -moz-border-radius:3px;
+ -webkit-border-radius:3px;
+ }
+
+ .example .yui3-dial-label {
+ visibility:hidden;
+ }
+
+ .example .yui3-dial-north-mark {
+ visibility:hidden;
+ }
+
+ .example .yui3-skin-sam #demo .yui3-dial-ring {
+ -moz-box-shadow: 5px 5px 6px rgba(0, 0, 0, 0.3);
+ -webkit-box-shadow: 5px 5px 6px rgba(0, 0, 0, 0.3);
+ }
+
+ .example #text {
+ color:#C5B291;
+ }
+
+ .example #text h2 {
+ font-size:261%;
+ color:#EEE5D6;
+ text-shadow: 2px 2px 7px #000;
+ margin: 0;
+ font-family: georgia;
+ }
+
+ .example #text h3 {
+ color:#EEE5D6;
+ font-size: 100%;
+ margin: 0.6em 0;
+ font-family: georgia;
+ }
+
+ .example #text p {
+ margin: 0.5em 0;
+ font-size:135%;
+ line-height: 1.2em;
+ }
+
+</style>
+
+
+<div class="container">
+ <div id="duck"></div>
+ <div id="demo"></div>
+ <div id="text">
+ <h3>Lot #562</h3>
+ <h2>Duck Decoy - Thomas Jefferson</h2>
+ <p>
+ Hand carved and signed by Thomas Jefferson.
+ circa 1785. Native hardwoods, stains, pigments.
+ Glass bead eyes.
+ </p>
+ <p>
+ Opening bid $93,000
+ </p>
+ </div>
+</div>
+
+<script type="text/javascript">
+ YUI().use("dial", function(Y) {
+ var oneFrameWidth = 300,
+ framesInSprite = 13;
+ var dial = new Y.Dial({
+ min: 0,
+ max: 26000,
+ value: 13000, // initial value in the middle of a large range allows rotation both ways
+ minorStep: 1,
+ majorStep: 2,
+ stepsPerRevolution: framesInSprite,
+ diameter: 150
+ });
+ dial.render('#demo');
+
+ // Reposition the duck sprite background image
+ dial.on( "valueChange", function(e){
+ // Handle values greater than one revolution
+ var moduloValue = (e.newVal % framesInSprite);
+
+ Y.one('#duck').setStyle('backgroundPosition', (moduloValue * -oneFrameWidth) + 'px 0px');
+ }, '#duck' );
+ });
+</script>
+
+
+