Foros del Web » Programando para Internet » Javascript »

Puzzle en transición de imágenes.

Estas en el tema de Puzzle en transición de imágenes. en el foro de Javascript en Foros del Web. En realidad no sería una transición, aunque fue el proyecto original. Describo primero el efecto: se trata de rotar una serie de imágenes haciendo que ...
  #1 (permalink)  
Antiguo 26/09/2011, 13:28
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Puzzle en transición de imágenes.

En realidad no sería una transición, aunque fue el proyecto original. Describo primero el efecto: se trata de rotar una serie de imágenes haciendo que aparezcan "armándose" como si fuesen un rompecabezas, pieza por pieza, hasta completarse.

El problema es que usando la forma clásica de ficha de puzzle, ese dibujo se "pierde" contra el de las fotos con mucha linea y color, y en la transición da lo mismo que usemos cualquier forma irregular. De hecho, si lo hacemos con cuadrados que cambien de posición hasta que la nueva foto quede "armada", el efecto se ve mucho mejor. Y es más fácil de crear.

Pero aún podemos aprovechar la idea del puzzle.
Si armamos la foto sobre un fondo liso, y la desarmamos antes de hacer la siguiente, el efecto se entiende sin ninguna duda, porque la forma de las piezas se destaca sobre el color del fondo. Y también es muy fácil de crear, ya que ahora nos ahorramos el uso de los filtros de IExplorer o las equivalencias que podamos hallar en otros navegadores.

Hay varias formas de hacerlo. Yo voy a proponer una muy sencilla, casi pavota, cómoda para destripar y estudiar, y que sea punto de partida de efectos más elaborados.

Código HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" =
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>TRANSICIÓN PUZZLE.</title>
<meta content="text/html"; charset="utf-8">
<script type=text/javascript>

var fichas0 = [];
var fichas1 = [];
var imagen = 0;
var visibilidad = "hidden";
var tiempo = 2000;
var saca;

var foto=new Array();
foto[0]=new Image();
foto[0].src="http://img851.imageshack.us/img851/9164/alejandrocarosella1.jpg";
foto[1]=new Image();
foto[1].src="http://img402.imageshack.us/img402/2165/mariagiuffra.jpg";
foto[2]=new Image();
foto[2].src="http://img153.imageshack.us/img153/2240/alfredobenavidezbedoya1.jpg";
foto[3]=new Image();
foto[3].src="http://img5.imageshack.us/img5/3530/santagbarraza.jpg";
foto[4]=new Image();
foto[4].src="http://img831.imageshack.us/img831/3487/migueldavila.jpg";
foto[5]=new Image();
foto[5].src="http://img62.imageshack.us/img62/5510/lorenzoamengual.jpg";
foto[6]=new Image();
foto[6].src="http://img233.imageshack.us/img233/8682/nadinasepulveda.jpg";


function inicio() {

if(visibilidad == "hidden"){
document.getElementById("cuadro").style.backgroundImage = "url("+ foto[imagen].src +")";
imagen = (imagen == 6) ? 0 : imagen+1;
}

for(f=0; f<63; f++){
fichas0[f] = fichas1[f] = f;
}

setTimeout(arma,tiempo);

}


function arma(){

var totFichas = fichas1.length;

	document.title=totFichas+ " " +saca+ " " +fichas1;

document.getElementById("sombra").style.visibility = "visible";

//alert("total " + totFichas)

var ficha = Math.floor(Math.random() * totFichas);

//alert("elige "+ elige);

saca = fichas1.splice(ficha,1);

var elige = "pzl" + saca;

document.getElementById(""+ elige +"").style.visibility = visibilidad;

if((totFichas-1) > 0){
setTimeout(arma,200);
//alert("a arma");
}

else {
setTimeout(sinSombra,1000);
//alert("a sinSombra");
}

}


function sinSombra(){

fichas1 = fichas0;

document.getElementById("sombra").style.visibility = "hidden";

setTimeout(desarma,100);
//alert("a desarma");

}


function desarma() {

if(visibilidad == "hidden") {
visibilidad = "visible";
tiempo = 5000; /* milisegundos que muestra cada foto */
}

else {
visibilidad = "hidden";
tiempo = 1000;
}

//alert(visibilidad+ " " +tiempo);

setTimeout(inicio,500);

//alert("a inicio");

}

onload = inicio;
</script>

<style type=text/css>

body {background-color: olive; 
}

h1 {font-size: 200%; color: white;
}

h3 {font-size: 150%; color: white;
}

p img {background-color: silver;
}

#cuadro {width: 640px; height: 480px; overflow:hidden; position: relative; 
background-image: url(http://img851.imageshack.us/img851/9164/alejandrocarosella1.jpg); 
border: 3px outset white; 
}

#sombra {width: 720px; height: 560px; overflow:hidden; position: absolute; 
top: -80px; left: -80px; 
background-image: url(http://img84.imageshack.us/img84/6059/sombrapuzzle.gif);
}

#pzl0, #pzl1, #pzl2, #pzl3, #pzl4, #pzl5, #pzl6, #pzl7, #pzl8, #pzl9, #pzl10, #pzl11, 
#pzl12, #pzl13, #pzl14, #pzl15, #pzl16, #pzl17, #pzl18, #pzl19, #pzl20, #pzl21, #pzl22, 
#pzl23, #pzl24, #pzl25, #pzl26, #pzl27, #pzl28, #pzl29, #pzl30, #pzl31, #pzl32, #pzl33, 
#pzl34, #pzl35, #pzl36, #pzl37, #pzl38, #pzl39, #pzl40, #pzl41, #pzl42, #pzl43, #pzl44, 
#pzl45, #pzl46, #pzl47, #pzl48, #pzl49, #pzl50, #pzl51, #pzl52, #pzl53, #pzl54, #pzl55, 
#pzl56, #pzl57, #pzl58, #pzl59, #pzl60, #pzl61, #pzl62 {position: absolute; 
} 

#pzl0 {top: -40px; left: -64px; 
}

#pzl1 {top: -40px; left: 96px; 
}

#pzl2 {top: -40px; left: 256px; 
}

#pzl3 {top: -40px; left: 416px; 
}

#pzl4 {top: -40px; left: 576px; 
}

#pzl5 {top: 120px; left: -64px; 
}

#pzl6 {top: 120px; left: 96px; 
}

#pzl7 {top: 120px; left: 256px; 
}

#pzl8 {top: 120px; left: 416px; 
}

#pzl9 {top: 120px; left: 576px; 
}

#pzl10 {top: 280px; left: -64px; 
}

#pzl11 {top: 280px; left: 96px; 
}

#pzl12 {top: 280px; left: 256px; 
}

#pzl13 {top: 280px; left: 416px; 
}

#pzl14 {top: 280px; left: 576px; 
}

#pzl15 {top: 440px; left: -64px; 
}

#pzl16 {top: 440px; left: 96px; 
}

#pzl17 {top: 440px; left: 256px; 
}

#pzl18 {top: 440px; left: 416px; 
}

#pzl19 {top: 440px; left: 576px; 
}

#pzl20 {top: -64px; left: 40px; 
}

#pzl21 {top: -64px; left: 200px; 
}

#pzl22 {top: -64px; left: 360px; 
}

#pzl23 {top: -64px; left: 520px; 
}

#pzl24 {top: 96px; left: 40px; 
}

#pzl25 {top: 96px; left: 200px; 
}

#pzl26 {top: 96px; left: 360px; 
}

#pzl27 {top: 96px; left: 520px; 
}

#pzl28 {top: 256px; left: 40px; 
}

#pzl29 {top: 256px; left: 200px; 
}

#pzl30 {top: 256px; left: 360px; 
}

#pzl31 {top: 256px; left: 520px; 
}

#pzl32 {top: 416px; left: 40px; 
}

#pzl33 {top: 416px; left: 200px; 
}

#pzl34 {top: 416px; left: 360px; 
}

#pzl35 {top: 416px; left: 520px; 
}

#pzl36 {top: 16px; left: -40px; 
}

#pzl37 {top: 16px; left: 120px; 
}

#pzl38 {top: 16px; left: 280px; 
}

#pzl39 {top: 16px; left: 440px; 
}

#pzl40 {top: 16px; left: 600px; 
}

#pzl41 {top: 176px; left: -40px; 
}

#pzl42 {top: 176px; left: 120px; 
}

#pzl43 {top: 176px; left: 280px; 
}

#pzl44 {top: 176px; left: 440px; 
}

#pzl45 {top: 176px; left: 600px; 
}

#pzl46 {top: 336px; left: -40px; 
}

#pzl47 {top: 336px; left: 120px; 
}

#pzl48 {top: 336px; left: 280px; 
}

#pzl49 {top: 336px; left: 440px; 
}

#pzl50 {top: 336px; left: 600px; 
}

#pzl51 {top: 40px; left: 16px; 
}

#pzl52 {top: 40px; left: 176px; 
}

#pzl53 {top: 40px; left: 336px; 
}

#pzl54 {top: 40px; left: 496px; 
}

#pzl55 {top: 200px; left: 16px; 
}

#pzl56 {top: 200px; left: 176px; 
}

#pzl57 {top: 200px; left: 336px; 
}

#pzl58 {top: 200px; left: 496px; 
}

#pzl59 {top: 360px; left: 16px; 
}

#pzl60 {top: 360px; left: 176px; 
}

#pzl61 {top: 360px; left: 336px; 
}

#pzl62 {top: 360px; left: 496px; 
}

</style> 
Sigue abajo
  #2 (permalink)  
Antiguo 26/09/2011, 13:29
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: Puzzle en transición de imágenes.

Viene de arriba
Código HTML:
<body>

<h1>Transici&oacute;n <i>puzzle</i>.</h1>

<center>
<div id="cuadro">
<div id="sombra"></div>

<img id="pzl0" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="0">

<img id="pzl1" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="1">

<img id="pzl2" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="2">

<img id="pzl3" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="3">

<img id="pzl4" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="4">

<img id="pzl5" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="5">

<img id="pzl6" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="6">

<img id="pzl7" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="7">

<img id="pzl8" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="8">

<img id="pzl9" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="9">

<img id="pzl10" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="10">

<img id="pzl11" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="11">

<img id="pzl12" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="12">

<img id="pzl13" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="13">

<img id="pzl14" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="14">

<img id="pzl15" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="15">

<img id="pzl16" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="16">

<img id="pzl17" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="17">

<img id="pzl18" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="18">

<img id="pzl19" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="19">

<img id="pzl20" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="20">

<img id="pzl21" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="21">

<img id="pzl22" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="22">

<img id="pzl23" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="23">

<img id="pzl24" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="24">

<img id="pzl25" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="25">

<img id="pzl26" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="26">

<img id="pzl27" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="27">

<img id="pzl28" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="28">

<img id="pzl29" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="29">

<img id="pzl30" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="30">

<img id="pzl31" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="31">

<img id="pzl32" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="32">

<img id="pzl33" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="33">

<img id="pzl34" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="34">

<img id="pzl35" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="35">

<img id="pzl36" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="36">

<img id="pzl37" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="37">

<img id="pzl38" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="38">

<img id="pzl39" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="39">

<img id="pzl40" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="40">

<img id="pzl41" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="41">

<img id="pzl42" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="42">

<img id="pzl43" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="43">

<img id="pzl44" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="44">

<img id="pzl45" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="45">

<img id="pzl46" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="46">

<img id="pzl47" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="47">

<img id="pzl48" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="48">

<img id="pzl49" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="49">

<img id="pzl50" src="http://img830.imageshack.us/img830/8478/puzzlev.gif" title="50">

<img id="pzl51" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="51">

<img id="pzl52" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="52">

<img id="pzl53" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="53">

<img id="pzl54" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="54">

<img id="pzl55" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="55">

<img id="pzl56" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="56">

<img id="pzl57" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="57">

<img id="pzl58" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="58">

<img id="pzl59" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="59">

<img id="pzl60" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="60">

<img id="pzl61" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="61">

<img id="pzl62" src="http://img197.imageshack.us/img197/2369/puzzleh.gif" title="62">

</div>
</center>

<h3>Im&aacute;genes : </h3>

<p>

<img src="http://img197.imageshack.us/img197/2369/puzzleh.gif">
<img src="http://img84.imageshack.us/img84/6059/sombrapuzzle.gif"> 
<img src="http://img830.imageshack.us/img830/8478/puzzlev.gif"> 
<br>
<img width=150 src="http://img5.imageshack.us/img5/3530/santagbarraza.jpg"> 
<img width=150 src="http://img402.imageshack.us/img402/2165/mariagiuffra.jpg"> 
<img width=150 src="http://img153.imageshack.us/img153/2240/alfredobenavidezbedoya1.jpg"> 
<img width=150 src="http://img851.imageshack.us/img851/9164/alejandrocarosella1.jpg">
<img width=150 src="http://img831.imageshack.us/img831/3487/migueldavila.jpg">
<img width=150 src="http://img233.imageshack.us/img233/8682/nadinasepulveda.jpg">
<img width=150 src="http://img62.imageshack.us/img62/5510/lorenzoamengual.jpg">
</p>

</body>
</html> 
Como adivino esa sonrisa sobradora en vuestros rostros, hago algunas aclaraciones más.
El agregado de las sombras es apenas un adorno, Se vería mucho mejor haciéndolo en *.png, pero decidí usar *.gif por 2 motivos. En primer lugar, cuando hice el original de este efecto había navegadores que no mostraban el canal alfa (uno, bah), y todavía hoy puede que alguien lo quiera ver con IE 6. El segundo es que no estamos en una cutandpastería, los códigos que ponemos tienen fines didácticos; y si alguno lo necesita se debe hacer su propia versión ¿Para qué me voy a molestar en mejorar una demo?
Por otro lado, ya sé que las fichas se pueden ubicar más fácil con un JS, y que podríamos ahorrarnos alguna función encadenada con setTimeout. Pero me parece que así está más claro el armado y el mecanismo que hace la animación. Como dije recién : cada uno después lo mejora a su gusto.

Y hablando de mejoras, casi le agrego la pila de fichas a un costado, que se "vaciaba" a medida que la foto se "armaba", pero era una complicación innecesaria, no le agrega nada. Lo que sí estaría bien es el efecto de "Error" cada cierta cantidad de imágenes : poner dos piezas fuera de lugar, como si el escript se hubiera equivocado; y después de unos segundos las invierte, simulando que "descubrió" su yerro. Ya hablamos de filtros y de métodos para restar colores y capas; va a dar mucho tarbajo, pero si alguien lo quiere hacer me parece que puede quedar simpático.

Por último, esta transición tiene un uso muy acotado, como el álbum de fotos del bebé o las gracias de la mascota. Ni se les ocurra ponerlo en un curriculum vitae o una presentación para la junta del directorio ... porque los van a mirar con caras muy serias.


Imágenes :




  #3 (permalink)  
Antiguo 26/09/2011, 13:49
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años, 5 meses
Puntos: 834
Respuesta: Puzzle en transición de imágenes.


Muy bueno!
Ahora, el reto sería replicarlo con canvas usando paths y clip (no porque sea mejor sino porque sería un buen reto, ¿no?)
  #4 (permalink)  
Antiguo 27/09/2011, 13:23
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años
Puntos: 317
Respuesta: Puzzle en transición de imágenes.

En realidad sí es mejor. Nos ahorramos las imágenes, porque las fichas de puzzle son muy fáciles de "dibujar" con canvas. Y ya tendríamos resuelto ese asunto del recorte irregular, porque admite XOR o transparentar una capa donde se cruza con otra, que es lo que se usa para "colocar" una pieza cualquiera sobre una imagen ya armada.

Estoy seguro de que los dedos se te van solos al teclado para empezar ... pero yo tenía la esperanza de que alguien que esté empezando a desarrollar páginas tome el desafío; porque éste es un buen ejemplo para practicar. Aunque hay varias formas de hacerlo. Si no te aguantas igual está bien ( ), siempre se puede inventar otra versión.

Gracias por el aliento. Como ves, te estoy haciendo caso y desempolvo viejos inventos.

Letras o imagenes transparentes

Texto transparente en Firefox (como filter chroma)

Etiquetas: html, puzzle
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:38.