Ver Mensaje Individual
  #7 (permalink)  
Antiguo 05/01/2016, 06:43
mpozo
 
Fecha de Ingreso: noviembre-2015
Mensajes: 231
Antigüedad: 9 años
Puntos: 86
Respuesta: Array orden aleatorio sin repetir

Ahora sí que funciona. He ido cogiendo de un lado y de otro y al final me ha salido esto. A ver si podéis echarle un vistazo y me decís que tal
Código Javascript:
Ver original
  1. <!DOCTYPE html>
  2. <head>
  3. <meta charset="utf-8" />
  4. <title>Documento sin título</title>
  5. <script>
  6. var barajar = new Barajar ({
  7.  
  8.     cartas: ['a', 'b', 'c', 'd'],
  9.     intervalo: 2000,
  10.     indice: -1,
  11.     mesa: '#mesa'
  12. });
  13.  
  14.  
  15. function Barajar(opt) {
  16.  
  17.     if (!(this instanceof Barajar)) return new Barajar();
  18.  
  19.     this.original = opt.cartas || [];
  20.     this.copia = [];
  21.     this.indice = opt.indice || -1;
  22.     this.intervalo = opt.intervalo || 1000;
  23.     this.mesa = opt.mesa || null;
  24.     this.i = 0;
  25. }
  26.  
  27.  
  28. Barajar.prototype.repartir = function() {
  29.  
  30.     this.indice = (this.indice < 0) ? Math.floor(Math.random() * this.original.length) : (this.indice + Math.floor(Math.random() * (this.original.length-1) + 1)) % this.original.length;
  31.  
  32.     var carta = this.original.splice(this.indice, 1);
  33.     this.copia.unshift(carta);
  34.  
  35.     if (!this.original.length) {
  36.  
  37.         this.original = Array.prototype.slice.call(this.copia, 0);
  38.         this.copia.splice(0, Number.MAX_VALUE);
  39.     }
  40.  
  41.     document.querySelector(this.mesa).innerHTML += (this.i++ % 4 == 0) ? '<br />' + carta : ' | ' + carta;
  42.  
  43.     setTimeout(this.repartir.bind(this), this.intervalo);
  44. }
  45.  
  46.  
  47. document.addEventListener('DOMContentLoaded', function() {barajar.repartir();}, false);
  48. </script>
  49. </head>
  50. <body>
  51. <div id="mesa"></div>
  52. </body>
  53. </html>