[Javascript] Comment marche ce scroller de news exactement ?

Discussion dans 'Web, design' créé par Carambar, 8 Février 2004.

Statut de la discussion:
Fermée.
  1. Offline
    Carambar He once forgot how to cry
    J'ai piqué un script sur cette page mais j'aimerais comprendre son fonctionnement.

    http://www.cnsnews.com/ticker/horizontal_code.js (clique droit, sauvegarder...)

    Voici le code source et un exemple de page HTML :

    horizontal_code.js
    Code:
    var marqueecontent='<nobr>   <b><font size="2"
    face="Arial">blahblahschtroumpfblahblah</font></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:-900000px">'+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>')
    }
    }
    exemple.html
    Code:
    <html>
    <head>
    <SCRIPT language="javascript">
    //Specify the marquee's width (in pixels)
    var marqueewidth="300px"
    //Specify the marquee's height
    var marqueeheight="25px"
    //Specify the marquee's marquee speed (larger is faster 1-10)
    var marqueespeed=2
    //configure background color:
    var marqueebgcolor="#FAF0E6"
    //Pause marquee onMousever (0=no. 1=yes)?
    var pauseit=1
    </SCRIPT>
    </head>
    <body>
    <SCRIPT language="javascript1.2" SRC="horizontal_code.js">
    </SCRIPT>
    </body>
    </html>
    Voila. J'ai constaté qu'il y a des tests pour Internet Explorer et Netscape. Sont-ils tous nécessaires ? Aussi, est-il possible de régler la largeur d'une zone DIV à 100% ou est-t-on limité à des valeurs px ?
    Carambar, 8 Février 2004
    #1
  2. Offline
    Carambar He once forgot how to cry
    Houla, aucune réponse. Tiens, voici une question concréte. Comment est-ce que le texte est défile de droite en gauche ? Quelle partie du code éffectue ce mouvement ?
    Carambar, 9 Février 2004
    #2
  3. Offline
    C'est limité en pixel je pense! :roll:
    BrainCracker, 10 Février 2004
    #3
  4. Offline
    Code:
    var marqueecontent='<nobr>   <b>Le JavaScript c\'est FuN!!! :))</b></nobr>'
    marqueespeed=(document.all)? marqueespeed : Math.max(+1, marqueespeed-1)
    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;right:-900000px">'+marqueecontent+'</span>')
    var actualwidth=''
    var cross_marquee, ns_marquee
    function populate(){
    if (iedom){
    cross_marquee=document.getElementById? document.getElementById("iemarquee") : document.all.iemarquee
    //-----------Dans la ligne suivante il faut changer le left en right---------------
    cross_marquee.style.right=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
    }
    righttime=setInterval("scrollmarquee()",+20) //le +20 est la vitesse de défilement (en gros)!
    }
    window.onload=populate
    function scrollmarquee(){
    if (iedom){
    //-----------Dans la ligne suivante il faut changer le left en right---------------
    if (parseInt(cross_marquee.style.right)>(actualwidth*(-1)+18))
    //-----------Dans la ligne suivante il faut changer le left en right---------------
    cross_marquee.style.right=parseInt(cross_marquee.style.right)-copyspeed+"px" 
    else
    //-----------Dans la ligne suivante il faut changer le left en right---------------
    cross_marquee.style.right=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;right: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>')
    }
    }
    
    Euh voilà je l'ai "épuré" un rien et j'ai modifié le mouvement! Maintenant ça va de gauche à droite! :]

    J'ai pas tout vérifier, j'ai juste changé le mouvement pour te montrer la partie du code qui touche au mouvement latéral! J'ai laissé trainer des commentaires pour t'aider! :)
    BrainCracker, 10 Février 2004
    #4
  5. Offline
    Carambar He once forgot how to cry
    Merci, je vais y jeter un coup d'oeil :) .

    Note : Tu devrais ajouter quelques retours à la ligne histoire déviter de péter le layout :p .
    Carambar, 10 Février 2004
    #5
  6. Offline
    lol sorry il était tard ... ou tôt! :D
    BrainCracker, 10 Février 2004
    #6
Statut de la discussion:
Fermée.