Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] ¿Como usar este script para rotar textos mas de una vez por pagina?

Estas en el tema de ¿Como usar este script para rotar textos mas de una vez por pagina? en el foro de Javascript en Foros del Web. Tengo este script que utilizo para modificar un texto en una pagina cada 3 segundos. Necesito saber como puedo modificar esto para que funcione para ...
  #1 (permalink)  
Antiguo 21/05/2014, 12:08
 
Fecha de Ingreso: mayo-2014
Mensajes: 15
Antigüedad: 10 años, 7 meses
Puntos: 0
¿Como usar este script para rotar textos mas de una vez por pagina?

Tengo este script que utilizo para modificar un texto en una pagina cada 3 segundos.

Necesito saber como puedo modificar esto para que funcione para modificar 6 textos diferentes en la misma pagina.

Alguien podria darme una pista o direccion la cual seguir. ?





Código:
var rotatingTextElement;
		var rotatingText = new Array();
		var ctr = 0;

		function initRotateText() {
		rotatingTextElement = document.getElementById("textToChange");
		rotatingText[0] = rotatingTextElement.innerHTML;
		rotatingText[1] = "no";
		setInterval(rotateText, 3000);
		}
		function rotateText() {
		ctr++;
		if(ctr >= rotatingText.length) {
		ctr = 0;
		}
		rotatingTextElement.innerHTML = rotatingText[ctr];
		}
		window.onload = initRotateText;
  #2 (permalink)  
Antiguo 21/05/2014, 12:20
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Pues.. no se donde quieras tener los textos... pero dentro la funcion seria muy desprolijo, mejor asi

Código Javascript:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
  2. <html>
  3. <head>
  4. <style>
  5.     .textToRead {display:none;}
  6. </style>
  7.  
  8. <script>
  9.     /*
  10.         @author: Pablo Bozzolo (de modificaciones*)
  11.         (autor original desconocido)
  12.     */
  13.     var rotatingTextElement;
  14.     var rotatingText = new Array();
  15.     var cnt = 0;
  16.  
  17.     function initRotateText() {
  18.         rotatingTextElement = document.getElementById("textToChange"); 
  19.         aLeer = document.getElementsByClassName("textToRead");
  20.        
  21.         // para la primera vez
  22.         rotatingTextElement.innerHTML = aLeer[0].innerHTML;
  23.  
  24.         for (var i = 0; i < aLeer.length; i++)    
  25.             rotatingText.push(aLeer[i].innerHTML);
  26.        
  27.         setInterval(rotateText, 1500);
  28.     }
  29.    
  30.     function rotateText() {
  31.         cnt++;
  32.         if(cnt >= rotatingText.length) {
  33.             cnt = 0;
  34.         }
  35.         rotatingTextElement.innerHTML = rotatingText[cnt];
  36.     }
  37.    
  38. </script>
  39. </head>
  40. <body onload="initRotateText();">
  41.    
  42.     <p class="textToRead"/>
  43.     Dependency Injection: Huh?
  44.  
  45.     Chances are, at some point in your learning, you've come across the term, "dependency injection." If you're still relatively early in your learning, you likely formed a confused expression and skipped over that part. Still, this is an important aspect of writing maintainable (and testable) code. In this article, I'll explain it in as simple a way as I'm capable of.
  46.        
  47.     <p class="textToRead"/>
  48.     Otro texto largo y aburridor
  49.        
  50.     <p class="textToRead"/>
  51.     Otro texto masss largo y aburridor
  52.        
  53.     <p class="textToRead">
  54.     Otro texto masss largo y mssssssss aburridor!!!
  55.     <p/>   
  56.    
  57.     <!-- aca se muestra : -->
  58.     <div id="textToChange">
  59.    
  60.     </div>
  61.    
  62. </body>
  63. </html>

Hay varios elementos (DIV, P ... da igual el tipo) ... de clase textToRead, crea los que necesites!
__________________
Salu2!

Última edición por Italico76; 21/05/2014 a las 12:51
  #3 (permalink)  
Antiguo 21/05/2014, 13:06
 
Fecha de Ingreso: mayo-2014
Mensajes: 15
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Hola Italico76. Gracias por tu respuesta.

El asunto es que en este caso hay diferentes textos rotando en el mismo párrafo. En mi caso es diferente lo que requiero.

Tengo unas 12 areas diferentes, y en cada una de ellas requiero que se roten dos textos.
¿ Si me explico ?

Seria algo como esto pero al correrlo no me funciona.

Código Java:
Ver original
  1. var rotatingTextElement;
  2.         var rotatingText = new Array();
  3.         var ctr = 0;
  4.  
  5.         function initRotateText() {
  6.         rotatingTextElement = document.getElementById("textToChange");
  7.         rotatingText[0] = rotatingTextElement.innerHTML;
  8.         rotatingText[1] = "no";
  9.         setInterval(rotateText, 3000);
  10.         }
  11.         function rotateText() {
  12.         ctr++;
  13.         if(ctr >= rotatingText.length) {
  14.         ctr = 0;
  15.         }
  16.         rotatingTextElement.innerHTML = rotatingText[ctr];
  17.         }
  18.         window.onload = initRotateText;
  19.  
  20.  
  21. var rotatingTextElement;
  22.         var rotatingText = new Array();
  23.         var ctr = 0;
  24.  
  25.         function initRotateText() {
  26.         rotatingTextElement = document.getElementById("textToChange2");
  27.         rotatingText[0] = rotatingTextElement.innerHTML;
  28.         rotatingText[1] = "no";
  29.         setInterval(rotateText, 3000);
  30.         }
  31.         function rotateText() {
  32.         ctr++;
  33.         if(ctr >= rotatingText.length) {
  34.         ctr = 0;
  35.         }
  36.         rotatingTextElement.innerHTML = rotatingText[ctr];
  37.         }
  38.         window.onload = initRotateText;
  39.  
  40. var rotatingTextElement;
  41.         var rotatingText = new Array();
  42.         var ctr = 0;
  43.  
  44.         function initRotateText() {
  45.         rotatingTextElement = document.getElementById("textToChange3");
  46.         rotatingText[0] = rotatingTextElement.innerHTML;
  47.         rotatingText[1] = "no";
  48.         setInterval(rotateText, 3000);
  49.         }
  50.         function rotateText() {
  51.         ctr++;
  52.         if(ctr >= rotatingText.length) {
  53.         ctr = 0;
  54.         }
  55.         rotatingTextElement.innerHTML = rotatingText[ctr];
  56.         }
  57.         window.onload = initRotateText;
  #4 (permalink)  
Antiguo 21/05/2014, 13:17
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Estudia si te sirve como te coloco ahora... pues seria modificar el JS :)

Código HTML:
Ver original
  1. <p class="textToRead sec_1"/>
  2.     Dependency Injection: Huh?
  3.  
  4.     Chances are, at some point in your learning, you've come across the term, "dependency injection." If you're still relatively early in your learning, you likely formed a confused expression and skipped over that part. Still, this is an important aspect of writing maintainable (and testable) code. In this article, I'll explain it in as simple a way as I'm capable of.
  5.        
  6.     <p class="textToRead sec_1"/>
  7.     Otro texto largo y aburridor
  8.        
  9.     <p class="textToRead sec_1"/>
  10.     Otro texto masss largo y aburridor
  11.        
  12.     <p class="textToRead sec_1">
  13.     Otro texto masss largo y mssssssss aburridor!!!
  14.     <p/>   
  15.    
  16.     <p class="textToRead sec_2"/>
  17.     Que feliz que estoy de estar vivo!
  18.        
  19.     <p class="textToRead sec_2">
  20.     Otro parrafo MUY motivador
  21.     <p/>   
  22.    
  23.     <p class="textToRead sec_3"/>
  24.     Hablemos de carros :)
  25.        
  26.     <p class="textToRead sec_3">
  27.     Emm...
  28.     <p/>   
  29.    
  30.     <!-- aca se muestra : -->
  31.     <div class="textToChange" id="sec_1">
  32.    
  33.     </div>
  34.    
  35.     <!-- aca se muestra : -->
  36.     <div class="textToChange" id="sec_2">
  37.    
  38.     </div>
  39.    
  40.     <!-- aca se muestra : -->
  41.     <div class="textToChange" id="sec_3">
  42.    
  43.     </div>
__________________
Salu2!
  #5 (permalink)  
Antiguo 21/05/2014, 13:24
 
Fecha de Ingreso: mayo-2014
Mensajes: 15
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Hola Italico76. Nuevamente gracias por tu ayuda.

Al cambiar lo que has puesto en el body del documento permaneciendo el script como estaba no corre ningún contenido. Lo cierto es que soy novato en Javascript de manera que no logro distinguir que debo cambiar.

Alguna sugerencia o dirección que me puedas indicar ?
  #6 (permalink)  
Antiguo 21/05/2014, 13:28
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Como lo coloque la primera vez... funciona! lo que pasa es que necesitas otra cosa por eso te pregunto si como esta el HTML que te acabo de poner te resultaria para modificar el script
__________________
Salu2!
  #7 (permalink)  
Antiguo 21/05/2014, 13:33
 
Fecha de Ingreso: mayo-2014
Mensajes: 15
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Ok, entiendo. En este caso me parece que si me funcionaria.
Tal como veo el html es justo lo que busco. Modificar diferentes textos en diferentes lugares.
  #8 (permalink)  
Antiguo 21/05/2014, 14:38
 
Fecha de Ingreso: diciembre-2013
Ubicación: España
Mensajes: 21
Antigüedad: 11 años
Puntos: 2
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

dharmauser como lo pusiste en la segunda vez es normal que no funcione si te fijas para los 3 textos estás usando la misma variable (var rotatingTextElement;) no estás creando 3 elementos, estás machando los valores de 1 3 veces.

Desde mi punto de vista, deberías modularizar el código. Crear un objeto padre cuyo constructor reciba: id de la etiqueta html y un array con los textos, y le creas un método cambiarTexto que reciba el contador.

Dentro de ese método, meter lo que sería la llamada que hace el cambio pero yo usaría algo en plan:
texto = arrayTextos[(contador % arrayTextos.length())]
Esto último te permitiría que pudieras tener arrays de textos de distinta longitud

Luego todos esos objetos, uno por cada texto que quieras cambiar o bien lo metes en un array o en otro objeto (a modo de colección).

Sólo tener un setInterval(rotateText, 3000); y dentro de rotateText hacer un for each de los objetos llamando a sus métodos cambiarTexto pasándole el valor del contador.

De esta forma, una vez tengas la estructura es muy fácil ampliarlo a x textos en pantalla y que a su vez cada texto pueda rotar con x mensajes.
  #9 (permalink)  
Antiguo 21/05/2014, 14:41
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

@dharmauser : tengo avanzado lo que te propuse... ahora salgo un rato.. y mas tarde lo termino y posteo
__________________
Salu2!
  #10 (permalink)  
Antiguo 21/05/2014, 14:54
 
Fecha de Ingreso: mayo-2014
Mensajes: 15
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Hola ShinFDuran. Gracias por tu respuesta y comentarios.

Lamentablemente no tengo aun el nivel de javascript como para ejecutar y llevar ese planteamiento a código. (Soy novato en javascript). He pasado dos días leyendo acerca de este tema, buscando soluciones en diferentes foros y lamentablemente no he encontrado una solución o un tutorial que siquiera se acerque a explicar como lograrlo para alguien que no tiene nivel en js.

Se que es difícil encontrar una solución que se adapte justo a mi problema pero lo cierto es que en muchos foros y posts encontré gente con el mismo problema, aunque en ninguno de ellos publicaban una solución.

¿Alguna sugerencia o comentario que me pueda llevar a cumplir esta meta en terminos muy muy sencillos?

Italico76 ha ofrecido un planteamiento para dar solucion, creo que sera muy util y muy agradecido por mi y muchos otros usuarios.

Nuevamente, gracias por tus comentarios.
  #11 (permalink)  
Antiguo 21/05/2014, 14:56
 
Fecha de Ingreso: mayo-2014
Mensajes: 15
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Hola Italico76, muchas gracias por tu aporte y atención.

Realmente creo que esto puede ser util para muchos escenarios y personas que se encuentran en una posición parecida a la mía.

Estaré atento por si publicas alguna solución.

Saludos.!
  #12 (permalink)  
Antiguo 21/05/2014, 18:33
 
Fecha de Ingreso: mayo-2014
Mensajes: 15
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Estimados @Italico76 y @ShinFDuran. Antes que nada agradecerles por el interés y sus comentarios.

He encontrado una solución y paso dejando cual fue para la comunidad y por si alguna otra alma en pena necesitara de algo como esto. Estoy seguro que no les resultara elegante pero por mi parte esta bien y funciona.


He utilizado este codigo que puede repetir tantas veces como necesite para modificar textos, imágenes o lo que desee. En este caso solo copio para dos elementos pero si repiten la porcion de codigo no encontraran problemas.


Código:
(function(){

    var texto1 = [
        'texto1-1',
        'texto1-2',
        ], i = 0;

    setInterval(function(){
        $('#texto1').fadeOut(function(){
            $(this).html(texto1[i=(i+1)% texto1]).fadeIn();
        });
    }, 2000);
    
})();

(function(){

    var texto2 = [
        'texto2-1',
        'texto2-2',
        ], i = 0;

    setInterval(function(){
        $('#texto2').fadeOut(function(){
            $(this).html(texto2[i=(i+1)% texto2]).fadeIn();
        });
    }, 2000);
    
})();

Espero que de algo sirva a la comunidad y nuevamente muchas gracias por el apoyo y comentarios.

Saludos.!
  #13 (permalink)  
Antiguo 21/05/2014, 20:23
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

@dharmauser : me alegro hayas solucionado aunque me parece bastante 'sucia' la solucion ya que repites muchas veces ese codigo... que te funciona porque utiliza variables locales y nuevamente es sucio porque no separa la logica de los datos

Estoy terminando mi implementacion.... en este momento corrigiendo errores
__________________
Salu2!
  #14 (permalink)  
Antiguo 22/05/2014, 08:17
 
Fecha de Ingreso: mayo-2014
Mensajes: 15
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Hola @ Italico76.

De solo ver el código se que es una solución muy poco elegante al ver como se repiten las misma estructura. Estaré agradecido de consultar una mejor forma de como ejecutar este script y aprender del ejemplo.

Saludos y nuevamente gracias por el interés.
  #15 (permalink)  
Antiguo 22/05/2014, 08:43
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Lo prometido es deuda:

Código Javascript:
Ver original
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
  2. <html>
  3. <head>
  4. <style>
  5.     .textToRead {display:none;}
  6. </style>
  7.  
  8. <script>
  9.  
  10.     /*
  11.         @author: Pablo Bozzolo (de modificaciones)     
  12.     */
  13.     var rotatingTextElement;
  14.     var rotatingText = new Array();
  15.     cont = new Array();
  16.  
  17.    
  18.     function initRotateText()
  19.     {
  20.         rotatingTextElement_list = document.getElementsByClassName("textToChange");
  21.         aLeer_list = document.getElementsByClassName("textToRead");        
  22.        
  23.         idens = new Array(); // identificadores (sec_1, etc.)
  24.         aCambiar_elem  = new Array(); // textos leidos
  25.         content = new Array();
  26.         cant_reading_texts = new Array();
  27.        
  28.         var iden_ix = -1;
  29.        
  30.         for (var i = 0; i < aLeer_list.length; i++)
  31.         {      
  32.             // temp
  33.             var sec = aLeer_list[i].getAttribute("class").split(" ")[1];
  34.            
  35.             if (idens.indexOf(sec) == -1)
  36.             {
  37.                 idens.push(sec);
  38.                 iden_ix++;
  39.                 content[iden_ix] = new Array();
  40.                 cant_reading_texts[iden_ix] = new Array();
  41.                 cant_reading_texts[iden_ix] = 1;
  42.                 cont.push(0);
  43.             }else
  44.                 cant_reading_texts[iden_ix]++;
  45.            
  46.            
  47.             content[iden_ix].push(aLeer_list[i].innerHTML);
  48.            
  49.             // temp
  50.             var aCambiar = 'textToChange '+sec;
  51.                    
  52.             // array de DIVs donde va a haber rotacion
  53.             aCambiar_elem[iden_ix] = document.getElementsByClassName(aCambiar)[0]; 
  54.            
  55.             //aCambiar_elem[iden_ix].innerHTML = 'Hola Mundo';
  56.             //console.log (aCambiar_elem[iden_ix].innerHTML);          
  57.         }
  58.                
  59.         rotateText();  
  60.        
  61.         setInterval(rotateText, 2300);
  62.     }
  63.    
  64.    
  65.     function rotateText() {
  66.                    
  67.         for (var iden_ix = 0; iden_ix < idens.length; iden_ix++)
  68.         {
  69.             identificador = idens[iden_ix];    
  70.            
  71.             aCambiar_elem[iden_ix].innerHTML = content[iden_ix][cont[iden_ix]];
  72.                        
  73.             cont[iden_ix]++;
  74.                    
  75.            
  76.             if(cont[iden_ix] >= cant_reading_texts[iden_ix])
  77.                 cont[iden_ix] = 0;
  78.            
  79.         }  
  80.     }
  81.    
  82. </script>
  83. </head>
  84. <body onload="initRotateText();">
  85.    
  86.     <p class="textToRead sec_1"/>
  87.     Dependency Injection: Huh?
  88.     <p class="textToRead sec_1"/>
  89.     Otro texto largo y aburridor
  90.        
  91.     <p class="textToRead sec_1"/>
  92.     Otro texto masss largo y aburridor
  93.        
  94.     <p class="textToRead sec_1">
  95.     Otro texto masss largo y mssssssss aburridor!!!
  96.     <p/>   
  97.    
  98.     <p class="textToRead sec_2"/>
  99.     Que feliz que estoy de estar vivo!
  100.        
  101.     <p class="textToRead sec_2">
  102.     Otro parrafo MUY motivador
  103.     <p/>   
  104.    
  105.     <p class="textToRead sec_3"/>
  106.     Hablemos de carros :)
  107.        
  108.     <p class="textToRead sec_3">
  109.     Emm...  
  110.     <p/>   
  111.    
  112.     <p class="textToRead sec_3">
  113.     Ya me aburri!!!
  114.     <p/>   
  115.    
  116.     <!-- aca se muestra : -->
  117.     <div class="textToChange sec_1">
  118.    
  119.     </div>
  120.    
  121.     <!-- aca se muestra : -->
  122.     <div class="textToChange sec_2">
  123.    
  124.     </div>
  125.    
  126.     <!-- aca se muestra : -->
  127.     <div class="textToChange sec_3">
  128.    
  129.     </div>
  130.    
  131. </body>
  132. </html>

Efectos ? se pueden agregar pero de por si..... tiene muchas ventajas en cuanto a ser un codigo prolijo, no repetitivo y no requiere librerias externas.

Es mas general de lo que pudieras pensar... si en vez de poner "sec_1" pornes "grupo1" .. u otra cosa sigue funcionando.. de hecho puedes poner

grupo1, seccion2, equipo3 ... lo importante es que dentro de "cada grupo" seas concistente con los nombres de las clases
__________________
Salu2!
  #16 (permalink)  
Antiguo 22/05/2014, 10:06
 
Fecha de Ingreso: mayo-2014
Mensajes: 15
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Hola @Italico76.

Nuevamente agradecido por el aporte para conmigo y la comunidad.

A pesar que había hecho funcionar lo que te comentaba voy a proceder a implementar tu solución, a estudiar y entenderla.

Te hago una pregunta.... crees que debería cambiar el titulo de este tema en el foro por alguno mas idóneo a fin de que la información fuera de utilidad y facil de ubicar para otras personas. Como le llamarías de manera que fuera util a otras personas con un problema similar ?

Te comentare en breves horas como me ha ido con esto tan pronto lo ponga a funcionar.

Nuevamente gracias..!!
  #17 (permalink)  
Antiguo 22/05/2014, 10:50
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 8 meses
Puntos: 292
Respuesta: ¿Como usar este script para rotar textos mas de una vez por pagina?

Bueno... el titulo del hilo no se que se pueda cambiar..... tampoco hice nada del otro mundo.... ojala te sirva
__________________
Salu2!

Etiquetas: funcion, rotar, textos, usar, vez
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:54.