Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/10/2012, 19:52
furoya
(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: [APORTE] rotador aleatorio sin repetición pocas imágenes

Hola todos.

Muy buenos los aportes, y especialmente tu idea, IsaBelM. Ésta es una pregunta muy repetida en el Foro de javascript, y a veces vienen aquí con ejemplos "que no les andan" y cuando los vemos nos agarramos la cabeza mientras huimos al grito desesperado de "¡ESTO NO ESTÁ PASANDO! ¡ESTO NO ESTÁ PASANDO!".

Al menos los que escribamos nosotros tendrán alguna 'garantía'. (Claro, mientras sigamos viniendo al Foro.)


Eso de que

Cita:
Iniciado por IsaBelM
... hay momentos en que el elemento se repite, con lo que si la temporización fuese de 30 segundo, veríamos ese elemento durante 1 minuto...
es totalmente cierto. Pero ocurre no solamente entre pocos baners, si hay muchos puede pasar igual. Hay menos probabilidades, pero es factible.
Y si estos baners son pagos, daría la idea de que alguno tiene privilegios, y su publicidad dura más tiempo.


Aprovecho para dejar otra forma, que sería una mezcla de los anteriores, porque no necesita verificar si hay repetición o si se terminó el array, pero usa el método splice(), y una alternativa al push().

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<title>ROTADOR 1. </title>
<script type="text/javascript">
var banners = new Array();
 banners[0]= new Array("http://imageshack.us/a/img109/5243/nataliamolinero.jpg",
"http://imageshack.us/photo/my-images/109/nataliamolinero.jpg/");
 banners[1]= new Array("http://imageshack.us/a/img513/3887/pedroroth.jpg",
"http://imageshack.us/photo/my-images/513/pedroroth.jpg/");
 banners[2]= new Array("http://imageshack.us/a/img848/1629/christianamezcua.jpg",
"http://imageshack.us/photo/my-images/848/christianamezcua.jpg/");
 banners[3]= new Array("http://imageshack.us/a/img195/4783/urinegvi.jpg",
"http://imageshack.us/photo/my-images/195/urinegvi.jpg/");

var elige = [];

function rotar0() {
elige = banners.splice(Math.floor(Math.random() * (banners.length - 1)), 1);
	//alert(elige)
	//alert(banners)
document.getElementById( "muestra" ).src = elige[0][0];
document.getElementById( "enlace" ).href = elige[0][1];
document.getElementById( "ruta" ).innerHTML = elige[0][1];
banners[banners.length] = [elige[0][0], elige[0][1]];
	//alert(banners)
	document.getElementById( "ruta" ).style.color = 
	(document.getElementById( "ruta" ).style.color == "blue")? "red" : "blue";
setTimeout(rotar0, 2000);
}

onload = rotar0;
</script>
<style type="text/css">
p {text-align: center; }
</style>
</head>
<body>
<p>
<a href="#" id="enlace"><img src="" alt="" width=320 height=240 id="muestra"></a>
</p>
<p id="ruta"></p>
</body>
</html>
Como habrán notado, tiene una "trampa". El último baner de la serie es excluído ya en la primera vuelta.
Pero el sponsor no tiene por qué enterarse.


El sistema sigue siendo de random. Quiero decir, que de toda la lista de baners, se elige una al azar para mostrarla, y el escript no permite que aparezcan dos iguales seguidos.
Pero si bien el segundo no puede ser igual al primero, el tercero sí puede repetir al primero, porque ya no están seguidos.

Ésta es una gran diferencia con el sistema shuffle, que manda toda la serie de baners en un orden, y cuando ya pasó cada uno una vez, los muestra todos de nuevo en un orden distinto. Por supuesto, también podría lograrse que el último de una serie no se repitiese con el primero de la siguiente.