| <!DOCTYPE html> |
| <!-- |
| Copyright 2011 The Closure Library Authors. All Rights Reserved. |
| |
| Use of this source code is governed by the Apache License, Version 2.0. |
| See the COPYING file for details. |
| --> |
| <!-- |
| Author: chrishenry@google.com (Chris Henry) |
| --> |
| <html> |
| <head> |
| <title>Closure: CSS3 Transition Demo</title> |
| <script src="../../../base.js"></script> |
| <script src="../../../deps.js"></script> |
| <link rel="stylesheet" href="../../css/demo.css"> |
| <style> |
| .demo-options { |
| float: left; |
| padding: 0 0 20px; |
| width: 248px; |
| } |
| .demo-panel { |
| margin: 0 0 0 264px; |
| padding: 80px 0 0 80px; |
| text-align: center; |
| } |
| label.options { |
| padding-left: 35px; |
| } |
| #demo-animated-box { |
| background-color: #000; |
| color: white; |
| height: 20px; |
| padding: 40px 0; |
| text-align: center; |
| width: 100px; |
| } |
| #demo-buttons { |
| padding: 8px 0 0; |
| text-align: center; |
| } |
| .goog-debug-panel { |
| clear: both; |
| } |
| .goog-debug-panel .logdiv { |
| height: 300px; |
| } |
| </style> |
| |
| <script type="text/javascript"> |
| goog.require('goog.debug.DivConsole'); |
| goog.require('goog.dispose'); |
| goog.require('goog.dom'); |
| goog.require('goog.events'); |
| goog.require('goog.events.ActionHandler'); |
| goog.require('goog.events.ActionHandler.EventType'); |
| goog.require('goog.fx.Transition.EventType'); |
| goog.require('goog.fx.css3'); |
| goog.require('goog.log'); |
| </script> |
| </head> |
| <body> |
| <div class="demo-options"> |
| <form> |
| <fieldset> |
| <legend>CSS3 transition choices</legend> |
| <label> |
| <input type="radio" name="transition" value="FadeIn" checked>Fade In |
| </label><br/> |
| <label class="options"> |
| Duration (in s): |
| <input type="text" size="3" name="FadeInDuration" value="1"> |
| </label><br/> |
| <label> |
| <input type="radio" name="transition" value="FadeOut">Fade Out |
| </label><br/> |
| <label class="options"> |
| Duration (in s): |
| <input type="text" size="3" name="FadeOutDuration" value="1"> |
| </label><br/> |
| <label> |
| <input type="radio" name="transition" value="Fade">Fade |
| </label><br/> |
| <label class="options"> |
| Duration (in s): |
| <input type="text" size="3" name="FadeDuration" value=".5"> |
| </label><br/> |
| <label class="options"> |
| CSS3 timing: |
| <input type="text" size="7" name="FadeTimingFn" value="ease-in"> |
| </label><br/> |
| <label class="options"> |
| Starting opacity: |
| <input type="text" size="3" name="FadeStartingOpacity" value=".2"> |
| </label><br/> |
| <label class="options"> |
| Ending opacity: |
| <input type="text" size="3" name="FadeEndingOpacity" value=".8"> |
| </label> |
| <div id="demo-buttons"> |
| <input type="button" id="animate-btn" value="Animate!"></input> |
| <input type="button" id="reset-btn" value="Reset"></input> |
| </div> |
| </fieldset> |
| </form> |
| </div> |
| <div class="demo-panel"> |
| <div id="demo-animated-box">Hi there!</div> |
| </div> |
| |
| <!-- Logging panel --> |
| <fieldset class="goog-debug-panel"> |
| <legend>Event log for the transition object</legend> |
| <div id="log"></div> |
| </fieldset> |
| |
| <script> |
| // Set up debug console. |
| var logger = goog.log.getLogger('Demo'); |
| new goog.debug.DivConsole(goog.dom.getElement('log')). |
| setCapturing(true); |
| var eventTypes = goog.object.getValues(goog.fx.Transition.EventType); |
| |
| var isPlaying = false; |
| var transition; |
| var animatedBox = goog.dom.getElement('demo-animated-box'); |
| var animateButton = goog.dom.getElement('animate-btn'); |
| var resetButton = goog.dom.getElement('reset-btn'); |
| |
| function fadeIn() { |
| var duration = parseFloat(getValue_('FadeInDuration')); |
| |
| transition = goog.fx.css3.fadeIn(animatedBox, duration); |
| installListener_(transition); |
| transition.play(); |
| } |
| |
| function fadeOut() { |
| var duration = parseFloat(getValue_('FadeOutDuration')); |
| |
| transition = goog.fx.css3.fadeOut(animatedBox, duration); |
| installListener_(transition); |
| transition.play(); |
| } |
| |
| function fade() { |
| var duration = parseFloat(getValue_('FadeDuration')); |
| var timingFn = getValue_('FadeTimingFn'); |
| var startOpacity = parseFloat(getValue_('FadeStartingOpacity')); |
| var endOpacity = parseFloat(getValue_('FadeEndingOpacity')); |
| |
| transition = goog.fx.css3.fade( |
| animatedBox, duration, timingFn, startOpacity, endOpacity); |
| installListener_(transition); |
| transition.play(); |
| } |
| |
| function animate() { |
| stopOrReset(); |
| goog.dispose(transition); |
| goog.Timer.callOnce(animate_); |
| } |
| |
| function animate_() { |
| isPlaying = true; |
| resetButton.value = 'Stop'; |
| |
| var transitionType = getValue_('transition'); |
| switch (transitionType) { |
| case 'FadeIn': fadeIn(); break; |
| case 'FadeOut': fadeOut(); break; |
| case 'Fade': fade(); break; |
| } |
| |
| goog.events.listen( |
| transition, goog.fx.Transition.EventType.END, function() { |
| isPlaying = false; |
| resetButton.value = 'Reset'; |
| }); |
| } |
| |
| function stopOrReset() { |
| if (!transition) return; |
| |
| if (isPlaying) { |
| isPlaying = false; |
| resetButton.value = 'Reset'; |
| transition.stop(); |
| } else { |
| transition.dispose(); |
| // Resets all the possible overriding (for now just opacity due to fade). |
| animatedBox.style.opacity = ''; |
| } |
| } |
| |
| function getValue_(name) { |
| var elements = document.forms[0].elements[name]; |
| if (goog.isArrayLike(elements)) { |
| for (var i = 0; i < elements.length; ++i) { |
| if (elements[i].checked) return elements[i].value; |
| } |
| } |
| |
| return elements.value; |
| } |
| |
| function installListener_(transition) { |
| goog.events.listen(transition, eventTypes, function(e) { |
| goog.log.info(logger, 'Fired event: ' + e.type); |
| }); |
| } |
| |
| goog.events.listen( |
| new goog.events.ActionHandler(animateButton), |
| goog.events.ActionHandler.EventType.ACTION, animate); |
| goog.events.listen( |
| new goog.events.ActionHandler(resetButton), |
| goog.events.ActionHandler.EventType.ACTION, stopOrReset); |
| |
| </script> |
| </body> |
| </html> |