blob: 30d70c0cd24a6b9c9b2433d73b7bfea5cb0a5900 [file] [log] [blame]
<!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>