Comunidad de diseño web y desarrollo en internet online

Math.random sin que se repita

Citar            
MensajeEscrito el 26 Mar 2017 03:14 am
Hola a todos, no se de javascript, vi este código por internet y me funciona a la perfección pero las frases se repiten sin completar un ciclo, me echais una mano? Gracias de antemano!

function frases_alea(){

frases = new Array();

frases[0] = "Todo está diseñado, pero pocas cosas están diseñadas bien.";
frases[1] = "EL Diseño es un intermediario entre la información y el entendimiento.";
frases[2] = "El diseño es el embajador silencioso de tu marca.";
frases[3] = "El 90% del talento de una persona es simplemente interés";
frases[4] = "Hacer las cosas lo más simple posible pero no más sencillo."
frases[5] = "El diseño depende en gran medida de las limitaciones."
frases[6] = "Si un diseño no se siente bien en el corazón, lo que dice el cerebro no importa."
frases[7] = "El diseño gráfico debe seducir, educar y, quizás lo más importante, provocar una respuesta emocional."
frases[8] = "Todo es diseño, ¡todo!"
frases[9] = "Un buen diseño puede soportar la moda de 10 años."
frases[10] = "El diseño es un lenguaje y lo principal es cómo usas ese lenguaje."
frases[11] = "No hay diseño gráfico sin disciplina. No hay disciplina sin inteligencia."
frases[12] = "El diseño es donde la ciencia y el arte se equilibran"
frases[13] = "La gente ignora el diseño que ignora a la gente."
frases[14] = "Un diseñador es un planificador con sentido del buen gusto."
frases[15] = "El diseño nunca debería de decir “Mírame”. Debería de decir: “Mira esto”"
frases[16] = "El buen diseño es una suerte de clarividencia hecha visual."
frases[17] = "Un diseño no está terminado hasta que alguien lo está utilizando."
frases[18] = "Practica un diseño seguro: Usa un concepto."
frases[19] = "Crea tu propio estilo visual … dejalo ser único para tí e identificable para otros."

aleatorio=Math.floor(Math.random()*20);

return frases[aleatorio];

}
onload=function(){
document.getElementById('algo').innerHTML=frases_alea();
setInterval(function(){document.getElementById('algo').innerHTML=frases_alea();},5000)
}

Por afmendez

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 28 Mar 2017 05:02 pm
he hecho esto a ver que te parece para que hagas pruebas con lo que necesites:

Código :

<html id='H'><head id="h"><meta charset='utf-8'></head><body id='b' spellcheck='false'></body><script>


var range=function(){return String('0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19').split(',').map(function(n){return parseInt(n);});},A=range(),D=document,M='Math',f='floor',r='random',l='length',w=window,I='innerHTML',s='sessionStorage',S='splice';
w[s]['frases']='Todo está diseñado, pero pocas cosas están diseñadas bien.|||EL Diseño es un intermediario entre la información y el entendimiento.|||El diseño es el embajador silencioso de tu marca.|||El 90% del talento de una persona es simplemente interés|||Hacer las cosas lo más simple posible pero no más sencillo|||El diseño depende en gran medida de las limitaciones.|||Si un diseño no se siente bien en el corazón, lo que dice el cerebro no importa.|||El diseño gráfico debe seducir, educar y, quizás lo más importante, provocar una respuesta emocional.|||Todo es diseño, ¡todo!|||Un buen diseño puede soportar la moda de 10 años.|||El diseño es un lenguaje y lo principal es cómo usas ese lenguaje.|||No hay diseño gráfico sin disciplina. No hay disciplina sin inteligencia.|||El diseño es donde la ciencia y el arte se equilibran|||La gente ignora el diseño que ignora a la gente.|||Un diseñador es un planificador con sentido del buen gusto.|||El diseño nunca debería de decir “Mírame”. Debería de decir: “Mira esto”|||El buen diseño es una suerte de clarividencia hecha visual.|||Un diseño no está terminado hasta que alguien lo está utilizando.|||Practica un diseño seguro: Usa un concepto.|||Crea tu propio estilo visual … dejalo ser único para tí e identificable para otros.';
var frases=w[s]['frases'].split('|||');


setInterval(function(){
   D.body[I]='';
   w.A=(w.A[l]==0)?range():w.A;
   var A=w.A;
   aleatori=w[M][f](w[M][r]()*A[l]);
   D.body[I]=frases[w.A[aleatori]];
   w.A[S](aleatori,1);

   
   },2000);

</script>
</html>


puedes nikelarlo mediante transition opacity o color o hacer un random en el color o hacer un transition left para que tenga un efecto marquesina apartir de ahi mejorarlo es facil. Te reecomiendo que hagas pruebas con la linea de comandos desde la consola web de firefox la cual va muy bien para ir modificando el codigo insitu sin necesidad de ir cargando la pagina.

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 28 Mar 2017 07:34 pm
Ok, estaba interesado en esto pero no contesté porque es medio largo, pero la contestación de aukun atrajo mi atención.
Por partes:

afmendez: el problema es que tienes un conjunto finito de frases, si lo que quieres es mostrarlas siempre distintas, simplemente usa un contador en vez de random. Para ello, fuera de la funcion frases_alea pones:

Código :

counter = 0;


Y dentro de la función agregas una línea y cambias la siguiente

Código :

if(counter>=frases.length) counter = 0;
return frases[counter++]


Listo.

Ahora el código supercríptico de aukun parece estar pasado por un minificador ... no veo contador, y quitando los jueguitos visuales de marquesina o fade ... ¿elije a los saltos? ¿Podrías ponerlo sin minificar?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos



Ultima edición por solisarg el 29 Mar 2017 12:13 pm, editado 1 vez

Argentina

firefox
Citar            
MensajeEscrito el 29 Mar 2017 06:20 am
soliarg lo que entendi de lo que pide es que de las 20 frases vayan apareciendo aleatoriamente las 20 frases sin que se repitan hasta haber agotado las 20 apariciones y luego volver a repetir el proceso. Por eso , y siento que sea tan criptico , lo que hago es de un rango de 0-19 elijo un numero aleatoriamente por ejemplo me aparece el 5 al hacer splice elimino un elemento array concretamente el 5 de manera que el array se reduce a 19 elementos de manera que el random ira de 0 a 18 i asi hasta que solo puede quedar un (jajaja como los inmortales) cuando pasa eso el array rango passa a ser otra vez de 20 elementos ,hago el proceso;
->array frases (20 elementos) -> este no se toca

->array rango ->(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)
->con math random me da un aleatorio y lo hago para que me aparezcan de 0 a 19 es decir de 0 a array rango length-1
->supongamos que aparece el 10 -> array rango[10]=10 ->printeo array frases[array rango[10]]
->hago splice a array rango concretamente el elemento 10 quedando
array rango -> (0,1,2,3,4,5,6,7,8,9,11,12,13,14,15,16,17,18,19) siendo ahora el array rango length de 19 hemos eliminado el elemento que corresponderia al 10
->hago un random de 0 a array rango length-1 es decir de 0 a 18 supongamos que aparece el 14
->array rango[14]=15 por tanto printeo array frases [15] y asi sucesivamente hasta la condicion
-> [[[CONDICION]]]]-> cuando array rango length sea solo 1 o 0 eso depende de donde queramos colocar la condicion hacer que array rango vuelva a ser -> (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19)

eso mismo lo hice en php para unos examenes online de ingles, aleman, frances pero un poco mas complicado la idea de eso es evitar repeticion en las preguntas hasta que se hubieran hagotado las de ese nivel y teniendo en cuenta los fallos i hacierto volver a repetir unas preguntas mas que otras.

La proxima vez lo pondre menos criptico

Por aukun

Claber

200 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 29 Mar 2017 12:31 pm
Correcto, usar un array index o pasar entre dos arrays alternativamente es la idea (una tercera sería quitar y volver a cargar la info via Ajax)
Gracias por el aporte, si pones el código simple de leer el amigo mendez y yo, y aquellos a quienes ayudes en el futuro podrán comprenderlo mas fácilmente

Salute
Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.