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