Ver Mensaje Individual
  #9 (permalink)  
Antiguo 17/10/2012, 15:18
Avatar de IsaBelM
IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: [APORTE] rotador aleatorio sin repetición pocas imágenes

furoya, a ver si es esto lo que intentas hacer.

se muestran los elemento barajados en todas las series y el último elemento de la serie, no es el mismo de la serie siguiente. si te fijas, se me ha ocurrido usar sort() para hacer el shuffle. en caso que el primer elemento de la nueva serie sea el mismo que el último elemento de la serie anterior, vuelvo a mandar a barajar
Cita:
<!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 2. </title>

<style type="text/css">
p {text-align: center; }
</style>
</head>
<body>



<textarea id="lista" rows=40 cols=80></textarea>


<script type="text/javascript">
var banners = new Array();
banners[0]= new Array(0, "http://imageshack.us/a/img109/5243/nataliamolinero.jpg",
"http://imageshack.us/photo/my-images/109/nataliamolinero.jpg/");
banners[1]= new Array(1, "http://imageshack.us/a/img513/3887/pedroroth.jpg",
"http://imageshack.us/photo/my-images/513/pedroroth.jpg/");
banners[2]= new Array(2, "http://imageshack.us/a/img848/1629/christianamezcua.jpg",
"http://imageshack.us/photo/my-images/848/christianamezcua.jpg/");
banners[3]= new Array(3, "http://imageshack.us/a/img195/4783/urinegvi.jpg",
"http://imageshack.us/photo/my-images/195/urinegvi.jpg/");


var elige = [], counter = 0, counter2 = 1, ultimo = 999, intervalo = '';

Array.prototype.barajar = function() {
elige = this.sort(function() {return (Math.round(Math.random()) -.5);});
rotar0();
}






function rotar0() {

if (counter2 % 4 == 0) {
ultimo = elige[counter % elige.length][0];
document.getElementById("lista").innerHTML += elige[counter % elige.length][1]+ " - " + elige[counter % elige.length][0] + " - " + ultimo +"\r\n\r\n";
clearTimeout(intervalo);
counter2 = 1;
var intervalo2 = setTimeout(function() {banners.barajar()}, 2000);


} else {

if (counter2 == 1 && ultimo == elige[counter % elige.length][0]) {
document.getElementById("lista").innerHTML += "repetido\r\n\r\n";
elige = [];
banners.barajar();
} else {

document.getElementById("lista").innerHTML += elige[counter % elige.length][1]+ " - " + elige[counter % elige.length][0] + " - " + ultimo + ' - ' + elige[0][0] +"\r\n";
counter++;
counter2++;
intervalo = setTimeout(function() {rotar0()}, 2000);
}
}



}

onload = banners.barajar();
</script>
</body>
</html>
ryugen no vi que habías posteado otra versión a la de furoya. te comento el inconveniente que tiene

el código de marlanga no es tan aleatorio como puede parecer. nunca entrará en el bombo, el elemento cuya posición sea la misma que el parámetro pasado. lo cual está bien por que te garantiza que nunca se repetirán consecutivamente. en contra prestación sabemos que unos de los elementos nunca va a aparecer en la primera vuelta. por lo tanto, cuando usas el código de marlanga, la secuencia nunca podrá empezar por el color rojo

por si no he logrado explicarme
Cita:
var datos=[["rojo","red"],["verde","green"],["azul","blue"]];
var div = document.getElementById("test");
function cambiar(i){
i=(i+Math.floor(Math.random()*(datos.length-1)+1))%datos.length;
div.style.background=datos[i][1];
div.innerHTML=datos[i][0];

setTimeout(function(){cambiar(0);},1000);
}

cambiar(0);
siempre se mostraría el verde o el azul. aunque de inicio le pases un número superior al largo del array, seguirá sin mostrarse uno, el último
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 17/10/2012 a las 17:00