Ver Mensaje Individual
  #11 (permalink)  
Antiguo 07/10/2012, 15:04
Avatar de emprear
emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 4 meses
Puntos: 1567
Respuesta: Imagen aleatoria en un inicio

Cita:
Iniciado por IsaBelM Ver Mensaje
emprear, a ver si estoy equivocada en mi lógica. Math.random redondea al entero mas próximo. ahora supongamos que devuelve .99 y lo multiplicamos por el número de elementos que tiene el array (10), el resultado sería 9.9 y redondea al entero mas próximo (10). pero esa posición no existe en el array. para evitar este posible error
En realidad es una buena observación, ya que el método original usa Math.floor, convengamos que la función es mérito de los señores Fisher y Yates, a los que , como no recuerdo quien, imaginó como
Cita:
Dos señores con sus gafas de culo de vaso y su barbita rubia llenando de garabatos una enorme pizarra en alguna universidad del medio oeste.
Yo usé parseInt() porque el fragmento viene de otra script en la que si mal no recuerdo, estaba testeando que era más rápido.

Tampoco es cierto, me rompí mucho la cabeza para ver como funcionaba

De todas formas en este caso en particular va a funcionar igual porque trabajamos sobre un valor conocido que siempre nos devolverá un entero, pongo la script completa con lo de las imágenes

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6.  
  7. <script type="text/javascript">
  8. //<![CDATA[
  9. //Método Fisher-Yates modificado
  10.  
  11. var mezclar = function(n){
  12. for(var j, x, i = n.length; i; j = Math.floor(Math.random() * i), x = n[--i], n[i] = n[j], n[j] = x);
  13.  
  14. return n;
  15. }
  16. var sec = [0,1,2,3,4,5,6,7];
  17. function mostrar(){
  18. var banners = new Array();
  19. banners[0]= new Array("google.jpg","http://www.enlace1.com","Google");
  20. banners[1]= new Array("foros.jpg","http://www.enlace2.com","FDW");
  21. banners[2]= new Array("body-bottom.png","http://www.enlace3.com","");
  22. banners[3]= new Array("354.gif","http://www.enlace1.com","Google");
  23. banners[4]= new Array("378.gif","http://www.enlace2.com","FDW");
  24. banners[5]= new Array("417.gif","http://www.enlace3.com","");
  25. banners[6]= new Array("469.gif","http://www.enlace1.com","Google");
  26. banners[7]= new Array("481.png","http://www.enlace3.com","");
  27.  
  28. var texto = document.getElementById('texto');
  29. var cadena = mezclar(sec);
  30. if(sec.length == 1){
  31. sec = [0,1,2,3,4,5,6,7];
  32. }
  33.  
  34. var num = cadena[0];
  35. texto.innerHTML = cadena[0];
  36. document.getElementById('img').src= banners[num][0];
  37. document.getElementById('link').href= banners[num][1];
  38. document.getElementById('img').title= banners[num][2];
  39. sec.shift();
  40. }
  41.  
  42. setInterval("mostrar()", 3000);
  43.  
  44. //]]>
  45. </head>
  46. <body onload="mostrar();">
  47. <span id="texto">
  48. </span>
  49. <br />
  50. <a href="http://google.com" id="link" target="_blank" name="link">
  51.     <img src="google.jpg" id="img" width="770" height="330" border="0" alt="Google" name="img" title="Google"/></a>
  52. </body>
  53. </html>



Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.