Estoy intentando aprovechar las transiciones de CSS3 para simplificar un efecto de cambio gradual con javascript. La idea es sencilla. Tengo un texto:
Y cuando le doy a un botón se convierte en:
Pero la idea es que esta inserción sea gradual. Esto se me ha ocurrido hacerlo iniciando la opacidad y tamaño de la fuente del elemento insertado a 0 y luego cambiarla con una transición. Sin embargo, algo debo hacer mal.
Muestro el código HTML:
Código HTML:
Ver original
Y el código Javascript:
Código Javascript:
Ver original
// crear elemento del tirón Document.prototype.create = function( tag, text ) { var elem = document.createElement( tag ); if( typeof text == 'string' ) { elem.appendChild( document.createTextNode( text ) ); } else if( text instanceof Node ) { elem.appendChild( text ); } else { elem = null; } return elem; } // inserta node como el hijo pos-esimo Node.prototype.insert = function ( node, pos ) { var nodes = this.childNodes; var n = nodes.length; if( pos < n ) { this.insertBefore( node, nodes[pos] ); } else if( pos == n ) { this.appendChild( node ); } else { return null; } return node; } window.onload = function() { document.getElementById( 'button_1' ).onclick = function() { // crear elemento span invisible var span = document.create( 'span', 'hola' ); span.style.fontSize = '0px'; span.style.opacity = '0.0'; span.style.color = 'red'; // efecto transition para qu al cambiar alguna propiedad lo haga gradualmente span.style.setProperty('transition', 'all 2s linear'); span.style.setProperty('-webkit-transition', 'all 2s linear'); // insertar elemento como segundo hijo de p var section = this.parentNode.parentNode; elem = section.getElementsByTagName('p')[0]; var inserted = elem.insert( span, 1 ); // hacer visible el nodo if( inserted ) { inserted.style.fontSize = '20px'; inserted.style.opacity = '1.0'; } } }
A parte de preguntarme donde esta el error, ¿creéis que es buena la idea de aprovecharme de las nuevas propiedades CSS para conseguir el efecto?
Un saludo y gracias!