Fx.DrawTransition = new Class({
Extends: Fx,
initialize: function(element, options){
this.element = document.id(element);
this.parent(options);
},
start: function(from, to){
this.parent(from, to);
this.color = this.getColor();
this.top = 0;
return this;
},
set: function(now){
new Element('p', {
html: '<b>' + now + '</b>',
styles: {
'left': now,
'top': this.top,
'background': this.color
}
}).inject(this.element);
this.top += 4;
return this;
},
getColor: function(){
var colors = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'],
digit = new Array(5),
color = "";
for (i = 0; i < 6; i++) {
digit[i] = colors[Math.round(Math.random() * 14)]
color = color + digit[i]
}
return '#'+color;
}
});
var myFx = new Fx.DrawTransition('canvas');
/* demo utility stuff */
$('clear').addEvent('click', function(event){
event.stop();
myFx.element.empty();
})
$('options').addEvent('submit',function(event){
event.stop();
myFx.setOptions(this.toPairs());
myFx.options.duration = myFx.options.duration.toInt();
myFx.options.fps = myFx.options.fps.toInt();
myFx.start($('from').value.toInt(), $('to').value.toInt());
});
Element.implement({
toPairs: function(){
var json = {};
this.getElements('input, select, textarea', true).each(function(el){
if (!el.name || el.disabled || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return;
var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
return opt.value;
}) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
$splat(value).each(function(val){
if (typeof val != 'undefined') json[el.name] = val;
});
});
return json;
}
});
<form id=options>
<p>
from <input id=from type=text value=0><br>
to <input id=to type=text value=275>
</p>
<p>
Transition <select name=transition>
<option>linear</option>
<option>pow:in</option>
<option>pow:out</option>
<option>pow:in:out</option>
<option>expo:in</option>
<option>expo:out</option>
<option selected>expo:in:out</option>
<option>circ:in</option>
<option>circ:out</option>
<option>circ:in:out</option>
<option>sine:in</option>
<option>sine:out</option>
<option>sine:in:out</option>
<option>back:in</option>
<option>back:out</option>
<option>back:in:out</option>
<option>bounce:in</option>
<option>bounce:out</option>
<option>bounce:in:out</option>
<option>elastic:in</option>
<option>elastic:out</option>
<option>elastic:in:out</option>
<option>quad:in</option>
<option>quad:out</option>
<option>quad:in:out</option>
<option>cubic:in</option>
<option>cubic:out</option>
<option>cubic:in:out</option>
<option>quart:in</option>
<option>quart:out</option>
<option>quart:in:out</option>
<option>quint:in</option>
<option>quint:out</option>
<option>quint:in:out</option>
</select>
</p>
<p>
Duration: <input type=text name=duration value=1500>
</p>
<p>
FPS <input type=text name=fps value=50>
</p>
<p>
<input type=submit value=Draw!> <button id=clear>Clear Canvas</button>
</p>
</form>
<p id=canvas></p>
body { font-family: helvetica, arial; }
#options {
margin-top: 20px;
padding: 10px;
background: #f0f0f0;
border: solid 1px #888;
float: left;
width: 250px
}
p {
margin-top: 1em;
margin-bottom: 1em;
}
#canvas p {
position: relative;
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.5);
height: 3px;
width: 4px;
margin-top: 0;
margin-bottom: 0;
position: absolute;
}
#canvas p b {
display: none;
position: absolute;
left: 15px;
top: 5px;
background: #585858;
color: #fff;
font-size: 10px;
z-index: 2;
padding: 2px 3px;
font-weight: normal;
}
#canvas p:hover b {
display: block;
}
#canvas {
position: relative;
margin-left: 280px;
}