Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'affichage Javascript sous Firefox

Sujet résolu
    1 octobre 2008 à 17:02:10

    Bonjour,

    J'ai créé une page web permettant d'afficher un texte défilant. Ce texte reprend les titres des news de la partie News.
    Le texte s'affiche bien avec IE, mais pas avec Firefox.
    Lorsque je supprime le DOCTYPE ou que j'insère un DOCTYPE moins strict, celà fonctionne sur les deux.
    Je pense qu'il y a une erreur dans le code mais je ne vois pas.

    Voici le code de la page d'accueil :


    <script type="text/javascript">
    
    var singletext=new Array();
    
    <?php
    for($i=0;$i<count($news);$i++)
    {
    ?>
    
    singletext[<?php echo $i?>]="<nobr align=\"center\" class=tan><a href=\"index.php?section=news\"><span class=\"defilnews\"><?php echo $news[($i+1)]?>&nbsp;:</span></a> <span class=\"newsAcc\" Onclick=\"javascript:document.location.href=\'index.php?section=news\'\"><?php echo $corps[($i+1)]?>...</span></a></nobr>";
    
    <?php
    }
    ?>
    
    </script>
    
    <script type="text/javascript">
    document.write('<td width='+swidth+'>');
    if(document.layers)
    {document.write('<ilayer id="ns4div" width='+swidth+' height='+sheight+' bgcolor='+sbcolor+'><layer id="ns4div1" width='+swidth+' height='+sheight+' onmouseover="sspeed=0;" onmouseout="sspeed=restart"></layer></ilayer>')}
    
    if(document.getElementById||document.all)
    {document.write('<div style="position:relative;overflow:hidden;width:'+swidth+';height:'+sheight+';clip:rect(0 '+swidth+' '+sheight+' 0);background-color:'+sbcolor+';" onmouseover="sspeed=0;" onmouseout="sspeed=restart"><div id="iens6div" style="position:absolute;height:'+sheight+';"></div></div>');}
    </script>
    



    Et le code de la page news.js :
    //-- Begin Scroller's Parameters and messages -->
    
    //scroller's width
    var swidth="650px";
    
    //scroller's height
    var sheight="25px";
    
    //scroller's speed 
    var sspeed=4;
    var restart=sspeed;
    var rspeed=sspeed;
    
    //scroller's pause 
    var spause=2000;
    
    //scroller's background
    var sbcolor="none";
    
    
    //-- end Parameters and message -->
    
    
    //-- begin: Scroller's Algorithm -->
    
    var ii="0";
    
    function goup()
    {
    	if(sspeed!=rspeed*8)
    	{sspeed=sspeed*2;
    	restart=sspeed;}
    }
    
    function godown()
    {
    	if(sspeed>rspeed)
    	{sspeed=sspeed/2;
    	restart=sspeed;}
    }
    
    function start()
    {
    	if(document.getElementById)
    	{ns6div=document.getElementById('iens6div');
    	ns6div.style.left=swidth;
    	ns6div.innerHTML=singletext[0];
    	sizeup=ns6div.offsetWidth;
    	ns6scroll();}
    
    	else if(document.layers)
    	{ns4layer=document.ns4div.document.ns4div1;
    	ns4layer.left=swidth;
    	ns4layer.document.write(singletext[0]);
    	ns4layer.document.close();
    	sizeup=ns4layer.document.width;
    	ns4scroll();}
    
    	else if(document.all)
    	{iediv=iens6div;
    	iediv.style.pixelLeft=swidth;
    	iediv.innerHTML=singletext[0];
    	sizeup=iediv.offsetWidth;
    	iescroll();}
    }
    
    function iescroll()
    {
    	if(iediv.style.pixelLeft>0&&iediv.style.pixelLeft<=sspeed)
    	{iediv.style.pixelLeft=0;
    	setTimeout("iescroll()",spause);}
    	
    	else if(iediv.style.pixelLeft>=sizeup*-1)
    	{iediv.style.pixelLeft-=sspeed;
    	setTimeout("iescroll()",100);}
    	
    	else
    	{if(ii==singletext.length-1)ii=0;
    	else ii++;
    	iediv.style.pixelLeft=swidth;
    	iediv.innerHTML=singletext[ii];
    	sizeup=iediv.offsetWidth;
    	iescroll();}
    }
    
    function ns4scroll()
    {
    	if(ns4layer.left>0&&ns4layer.left<=sspeed)
    	{ns4layer.left=0;
    	setTimeout("ns4scroll()",spause);}
    	
    	else if(ns4layer.left>=sizeup*-1)
    	{ns4layer.left-=sspeed;
    	setTimeout("ns4scroll()",100);}
    	
    	else
    	{if(ii==singletext.length-1)ii=0;
    	else ii++;
    	ns4layer.left=swidth;
    	ns4layer.document.write(singletext[ii]);
    	ns4layer.document.close();
    	sizeup=ns4layer.document.width;
    	ns4scroll();}
    }
    
    function ns6scroll()
    {
    	if(parseInt(ns6div.style.left)>0&&parseInt(ns6div.style.left)<=sspeed)
    	{ns6div.style.left=0;
    	setTimeout("ns6scroll()",spause);}
    	
    	else if(parseInt(ns6div.style.left)>=sizeup*-1)
    	{ns6div.style.left=parseInt(ns6div.style.left)-sspeed;
    	setTimeout("ns6scroll()",100);}
    
    	else
    	{if(ii==singletext.length-1)ii=0;
    	else ii++;
    	ns6div.style.left=swidth;
    	ns6div.innerHTML=singletext[ii];
    	sizeup=ns6div.offsetWidth;
    	ns6scroll();}
    }
    
    //-- end Algorithm -->
    


    Quelqu'un saurait-il me dire ce qui cloche ?
    Merci d'avance !
    • Partager sur Facebook
    • Partager sur Twitter
      1 octobre 2008 à 20:36:01

      Ton code est illisible. Commence par l'indenter correctement si tu veux avoir une réponse.
      • Partager sur Facebook
      • Partager sur Twitter
        1 octobre 2008 à 23:42:30

        Désolé.

        Voilà, j'ai corrigé en faisant de mon mieux sachant que je ne suis pas un as de javascript.

        Merci
        • Partager sur Facebook
        • Partager sur Twitter
          1 octobre 2008 à 23:56:37

          Hum ... A mon avis tu ne dois pas connaître la signification du mot "indenter". Tant pis.

          Dans ce cas, je peux te proposer du code prêt à l'emploi en remplacement du tien :
          http://www.developpez.net/forums/d5431 [...] xtes-dimages/
          • Partager sur Facebook
          • Partager sur Twitter
            2 octobre 2008 à 13:35:35

            OK pour l'indentation, je n'avais pas compris comment le faire en éditant mon message mais j'ai trouvé.
            J'ai essayé de la refaire au mieux car je souhaite conserver ce code et ne pas me lancer dans un nouveau code à modifier vu mon niveau de compétences en javascript... :euh:

            Merci encore
            • Partager sur Facebook
            • Partager sur Twitter
              3 octobre 2008 à 14:26:18

              J'ai téléchargé Web Developer pour tester la page en question.
              RAS a priori sur le code javascript. En revanche, il me renvoie l'erreur CSS suivante :

              Citation : Web Developer

              Erreur d'analyse de la valeur pour la propriété "left". Déclaration abandonnée.



              Serait-ce la source du problème d'affichage ?

              Par ailleurs je me suis aperçu que j'avais oublié un bout de code PHP.

              Barnabé, impossible d'accéder au fichier zip du code de remplacement que tu me proposes.
              • Partager sur Facebook
              • Partager sur Twitter
                5 octobre 2008 à 21:19:03

                up
                help please..!
                merci... ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  5 octobre 2008 à 22:11:49

                  Met <![CDATA[ après <script> et ]]> avant </script> pour que le navigateur
                  comprenne bien qu'il ne doit pas interpréter les caractères tels que < et
                  > comme étant du html mais du texte (dans ton cas du javascript).

                  <script>
                  <![CDATA[
                  
                  // ton code javascript
                  
                  
                  ]]>
                  </script>
                  

                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 octobre 2008 à 22:26:06

                    Déjà testé : sans effet. Ca me plante même mon script sur IE.
                    Il doit y avoir une bricole que Firefox ne laisse pas passer avec mon DOCTYPE strict mais je ne vois pas. :(
                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 octobre 2008 à 22:48:34

                      Bonsoir,

                      J'effectue différents test depuis 2 jours.
                      En fait, en enlevant le overflow:hidden dans la partie PHP, je constate que mon texte s'affiche bien en dehors de mon cadre. Le problème est qu'il ne défile pas donc c'est le script qui n'est pas bon.
                      Il semble que la partie qui pose problème à Firefox soit celle ci :
                      function start()
                      {
                      	if(document.getElementById)
                      	{ns6div=document.getElementById('iens6div');
                      	ns6div.style.left=swidth;
                      	ns6div.innerHTML=singletext[0];
                      	sizeup=ns6div.offsetWidth;
                      	ns6scroll();}
                      
                      	else if(document.layers)
                      	{ns4layer=document.ns4div.document.ns4div1;
                      	ns4layer.left=swidth;
                      	ns4layer.document.write(singletext[0]);
                      	ns4layer.document.close();
                      	sizeup=ns4layer.document.width;
                      	ns4scroll();}
                      
                      	else if(document.all)
                      	{iediv=iens6div;
                      	iediv.style.pixelLeft=swidth;
                      	iediv.innerHTML=singletext[0];
                      	sizeup=iediv.offsetWidth;
                      	iescroll();}
                      }
                      

                      ou celle-ci :
                      function ns6scroll()
                      {
                      	if(parseInt(ns6div.style.left)>0&&parseInt(ns6div.style.left)<=sspeed)
                      	{ns6div.style.left=0;
                      	setTimeout("ns6scroll()",spause);}
                      	
                      	else if(parseInt(ns6div.style.left)>=sizeup*-1)
                      	{ns6div.style.left=parseInt(ns6div.style.left)-sspeed;
                      	setTimeout("ns6scroll()",100);}
                      
                      	else
                      	{if(ii==singletext.length-1)ii=0;
                      	else ii++;
                      	ns6div.style.left=swidth;
                      	ns6div.innerHTML=singletext[ii];
                      	sizeup=ns6div.offsetWidth;
                      	ns6scroll();}
                      }
                      

                      D'après Web Developper et mes recherches, c'est le paramètre Left qui pose problème.
                      Il semblerait que la syntaxe ne soit pas bonne alors j'ai essayé pas mal de choses mais sans succès.
                      Une idée ?

                      Merci d'avance.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 octobre 2008 à 17:38:15

                        problème réglé, il me manquait un petit "px" là :
                        else if(parseInt(ns6div.style.left)>=sizeup*-1)
                        	{ns6div.style.left=parseInt(ns6div.style.left)-sspeed+"px";
                        	setTimeout("ns6scroll()",100);}
                        

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Problème d'affichage Javascript sous Firefox

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown