transition.html 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <!DOCTYPE html>
  2. <!--
  3. Copyright 2011 The Closure Library Authors. All Rights Reserved.
  4. Use of this source code is governed by the Apache License, Version 2.0.
  5. See the COPYING file for details.
  6. -->
  7. <!--
  8. Author: chrishenry@google.com (Chris Henry)
  9. -->
  10. <html>
  11. <head>
  12. <title>Closure: CSS3 Transition Demo</title>
  13. <script src="../../../base.js"></script>
  14. <script src="../../../deps.js"></script>
  15. <link rel="stylesheet" href="../../css/demo.css">
  16. <style>
  17. .demo-options {
  18. float: left;
  19. padding: 0 0 20px;
  20. width: 248px;
  21. }
  22. .demo-panel {
  23. margin: 0 0 0 264px;
  24. padding: 80px 0 0 80px;
  25. text-align: center;
  26. }
  27. label.options {
  28. padding-left: 35px;
  29. }
  30. #demo-animated-box {
  31. background-color: #000;
  32. color: white;
  33. height: 20px;
  34. padding: 40px 0;
  35. text-align: center;
  36. width: 100px;
  37. }
  38. #demo-buttons {
  39. padding: 8px 0 0;
  40. text-align: center;
  41. }
  42. .goog-debug-panel {
  43. clear: both;
  44. }
  45. .goog-debug-panel .logdiv {
  46. height: 300px;
  47. }
  48. </style>
  49. <script type="text/javascript">
  50. goog.require('goog.debug.DivConsole');
  51. goog.require('goog.dispose');
  52. goog.require('goog.dom');
  53. goog.require('goog.events');
  54. goog.require('goog.events.ActionHandler');
  55. goog.require('goog.events.ActionHandler.EventType');
  56. goog.require('goog.fx.Transition.EventType');
  57. goog.require('goog.fx.css3');
  58. goog.require('goog.log');
  59. </script>
  60. </head>
  61. <body>
  62. <div class="demo-options">
  63. <form>
  64. <fieldset>
  65. <legend>CSS3 transition choices</legend>
  66. <label>
  67. <input type="radio" name="transition" value="FadeIn" checked>Fade In
  68. </label><br/>
  69. <label class="options">
  70. Duration (in s):
  71. <input type="text" size="3" name="FadeInDuration" value="1">
  72. </label><br/>
  73. <label>
  74. <input type="radio" name="transition" value="FadeOut">Fade Out
  75. </label><br/>
  76. <label class="options">
  77. Duration (in s):
  78. <input type="text" size="3" name="FadeOutDuration" value="1">
  79. </label><br/>
  80. <label>
  81. <input type="radio" name="transition" value="Fade">Fade
  82. </label><br/>
  83. <label class="options">
  84. Duration (in s):
  85. <input type="text" size="3" name="FadeDuration" value=".5">
  86. </label><br/>
  87. <label class="options">
  88. CSS3 timing:
  89. <input type="text" size="7" name="FadeTimingFn" value="ease-in">
  90. </label><br/>
  91. <label class="options">
  92. Starting opacity:
  93. <input type="text" size="3" name="FadeStartingOpacity" value=".2">
  94. </label><br/>
  95. <label class="options">
  96. Ending opacity:
  97. <input type="text" size="3" name="FadeEndingOpacity" value=".8">
  98. </label>
  99. <div id="demo-buttons">
  100. <input type="button" id="animate-btn" value="Animate!"></input>
  101. <input type="button" id="reset-btn" value="Reset"></input>
  102. </div>
  103. </fieldset>
  104. </form>
  105. </div>
  106. <div class="demo-panel">
  107. <div id="demo-animated-box">Hi there!</div>
  108. </div>
  109. <!-- Logging panel -->
  110. <fieldset class="goog-debug-panel">
  111. <legend>Event log for the transition object</legend>
  112. <div id="log"></div>
  113. </fieldset>
  114. <script>
  115. // Set up debug console.
  116. var logger = goog.log.getLogger('Demo');
  117. new goog.debug.DivConsole(goog.dom.getElement('log')).
  118. setCapturing(true);
  119. var eventTypes = goog.object.getValues(goog.fx.Transition.EventType);
  120. var isPlaying = false;
  121. var transition;
  122. var animatedBox = goog.dom.getElement('demo-animated-box');
  123. var animateButton = goog.dom.getElement('animate-btn');
  124. var resetButton = goog.dom.getElement('reset-btn');
  125. function fadeIn() {
  126. var duration = parseFloat(getValue_('FadeInDuration'));
  127. transition = goog.fx.css3.fadeIn(animatedBox, duration);
  128. installListener_(transition);
  129. transition.play();
  130. }
  131. function fadeOut() {
  132. var duration = parseFloat(getValue_('FadeOutDuration'));
  133. transition = goog.fx.css3.fadeOut(animatedBox, duration);
  134. installListener_(transition);
  135. transition.play();
  136. }
  137. function fade() {
  138. var duration = parseFloat(getValue_('FadeDuration'));
  139. var timingFn = getValue_('FadeTimingFn');
  140. var startOpacity = parseFloat(getValue_('FadeStartingOpacity'));
  141. var endOpacity = parseFloat(getValue_('FadeEndingOpacity'));
  142. transition = goog.fx.css3.fade(
  143. animatedBox, duration, timingFn, startOpacity, endOpacity);
  144. installListener_(transition);
  145. transition.play();
  146. }
  147. function animate() {
  148. stopOrReset();
  149. goog.dispose(transition);
  150. goog.Timer.callOnce(animate_);
  151. }
  152. function animate_() {
  153. isPlaying = true;
  154. resetButton.value = 'Stop';
  155. var transitionType = getValue_('transition');
  156. switch (transitionType) {
  157. case 'FadeIn': fadeIn(); break;
  158. case 'FadeOut': fadeOut(); break;
  159. case 'Fade': fade(); break;
  160. }
  161. goog.events.listen(
  162. transition, goog.fx.Transition.EventType.END, function() {
  163. isPlaying = false;
  164. resetButton.value = 'Reset';
  165. });
  166. }
  167. function stopOrReset() {
  168. if (!transition) return;
  169. if (isPlaying) {
  170. isPlaying = false;
  171. resetButton.value = 'Reset';
  172. transition.stop();
  173. } else {
  174. transition.dispose();
  175. // Resets all the possible overriding (for now just opacity due to fade).
  176. animatedBox.style.opacity = '';
  177. }
  178. }
  179. function getValue_(name) {
  180. var elements = document.forms[0].elements[name];
  181. if (goog.isArrayLike(elements)) {
  182. for (var i = 0; i < elements.length; ++i) {
  183. if (elements[i].checked) return elements[i].value;
  184. }
  185. }
  186. return elements.value;
  187. }
  188. function installListener_(transition) {
  189. goog.events.listen(transition, eventTypes, function(e) {
  190. goog.log.info(logger, 'Fired event: ' + e.type);
  191. });
  192. }
  193. goog.events.listen(
  194. new goog.events.ActionHandler(animateButton),
  195. goog.events.ActionHandler.EventType.ACTION, animate);
  196. goog.events.listen(
  197. new goog.events.ActionHandler(resetButton),
  198. goog.events.ActionHandler.EventType.ACTION, stopOrReset);
  199. </script>
  200. </body>
  201. </html>