Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/09/2008, 08:21
matak
 
Fecha de Ingreso: julio-2008
Ubicación: Alcañiz-Teruel-España
Mensajes: 182
Antigüedad: 15 años, 10 meses
Puntos: 5
scroll de texto horizontal

Buenas conpañeros,

Tengo un pequeño problema con este tema, la cosa es que tengo que extraer unos datos de una base de datos MySQL y mostrarlos enla pagina con un scroll de texto horizontal que se repite una y otra vez. Aparte el usuario puede ir añadiendo más texto. encontre este codigo por internet.

Código:
        //Specify the marquee's width (in pixels)
        var marqueewidth="700px"
        //Specify the marquee's height
        var marqueeheight="25px"
        //Specify the marquee's marquee speed (larger is faster 1-10)
        var marqueespeed=0
        //configure background color:
        var marqueebgcolor="transparent"
        //Pause marquee onMousever (0=no. 1=yes)?
        var pauseit=1
        

        

        //Specify the marquee's content (don't delete <nobr> tag)
        //Keep all content on ONE line, and backslash any single quotations (ie: that\'s great):

        var marqueecontent='<nobr><span class="style_scroll"><?PHP echo extraer_actMesAlrm($db,$mes); ?></span></nobr>'


        ////NO NEED TO EDIT BELOW THIS LINE////////////
        marqueespeed=(document.all)? marqueespeed : Math.max(1, marqueespeed-1) //slow speed down by 1 for NS
        var copyspeed=marqueespeed
        var pausespeed=(pauseit==0)? copyspeed: 0
        var iedom=document.all||document.getElementById
        if (iedom)
        document.write('<span id="temp" style="visibility:hidden;position:absolute;top:-100px;left:-9000px">'+marqueecontent+'</span>')
        var actualwidth=''
        var cross_marquee, ns_marquee

        function populate(){
        if (iedom){
        cross_marquee=document.getElementById? document.getElementById("iemarquee") : document.all.iemarquee
        cross_marquee.style.left=parseInt(marqueewidth)+8+"px"
        cross_marquee.innerHTML=marqueecontent
        actualwidth=document.all? temp.offsetWidth : document.getElementById("temp").offsetWidth
        }
        else if (document.layers){
        ns_marquee=document.ns_marquee.document.ns_marquee2
        ns_marquee.left=parseInt(marqueewidth)+8
        ns_marquee.document.write(marqueecontent)
        ns_marquee.document.close()
        actualwidth=ns_marquee.document.width
        }
        lefttime=setInterval("scrollmarquee()",20)
        }
        //window.onload=populate

        function scrollmarquee(){
        if (iedom){
        if (parseInt(cross_marquee.style.left)>(actualwidth*(-1)+8))
        cross_marquee.style.left=parseInt(cross_marquee.style.left)-copyspeed+"px"
        else
        cross_marquee.style.left=parseInt(marqueewidth)+8+"px"

        }
        else if (document.layers){
        if (ns_marquee.left>(actualwidth*(-1)+8))
        ns_marquee.left-=copyspeed
        else
        ns_marquee.left=parseInt(marqueewidth)+8
        }
        }

        if (iedom||document.layers){
        with (document){
        //document.write('<table border="0" cellspacing="0" cellpadding="0"><td>')
        if (iedom){
        write('<div style="position:relative;width:'+marqueewidth+';height:'+marqueeheight+';overflow:hidden">')
        write('<div style="position:absolute;width:'+marqueewidth+';height:'+marqueeheight+';background-color:'+marqueebgcolor+'" onMouseover="copyspeed=pausespeed" onMouseout="copyspeed=marqueespeed">')
        write('<div id="iemarquee" style="position:absolute;left:0px;top:0px"></div>')
        write('</div></div>')
        }
        else if (document.layers){
        write('<ilayer width='+marqueewidth+' height='+marqueeheight+' name="ns_marquee" bgColor='+marqueebgcolor+'>')
        write('<layer name="ns_marquee2" left=0 top=0 onMouseover="copyspeed=pausespeed" onMouseout="copyspeed=marqueespeed"></layer>')
        write('</ilayer>')
        }
        //document.write('</td></table>')
        }
        }
hay tres líneas que tube que comentar para que me funcione. una de ellas es:

Código:
//window.onload=populate
este me machacaba un método que tengo en el onload del body que se ejecuta periodicamente. lo comente y añadi:
Código HTML:
<body onLoad='javascript: updateMensajeria(); javascript: populate();'> 
cuando entro en la página me funciona perfectamente, el problema es cuando el usuario añade al scroll, cada vez que añado se me acelera un poco. A la 4 vez que se añade...imaginaros...marcha to follao el scroll...

para añadir generé esta función

Código:
        function addcadena(cadena){
          //alert(cadena);
          nchar2=cadena.length;
          control=cadena.substring(0,1);
          //alert(control);
          cadena=cadena.substring(1,nchar2);
          //alert(cadena);
          if (!buscar(cadena)) {
            aux=cadena.toUpperCase();
            //alert(aux);
            if (control == 0) cadena=aux.htmlEntities()+"… ** ";
            else cadena=aux.htmlEntities()+" ** ";
            //alert(cadena);
            cadena2=marqueecontent;
            //alert(cadena2);
            nchar=cadena2.length;
            //alert(nchar);
            cadena3=cadena2.substring(33,(nchar-14));
            //alert(cadena3);
            cadena2='<nobr><span class="style_scroll">'+cadena3+cadena+'</span></nobr>';
            //alert(cadena2);
            marqueecontent=cadena2;

            marqueespeed=(document.all)? marqueespeed : Math.max(1, marqueespeed-1) //slow speed down by 1 for NS
            copyspeed=marqueespeed
            pausespeed=(pauseit==0)? copyspeed: 0;
            iedom=document.all||document.getElementById;
            if (iedom)
              document.getElementById("temp").innerHTML=marqueecontent;          
            populate();
          }
        }
He probado mil cosas sin conseguir nada y es por ello que acudo a ustedes...

Si me pueden ayudar... Gracias de antemano