Page 1 sur 1

Bug : Marquee et display none

Publié : 16 avr. 2008, 17:54
par Thierry.l
Bonjour,
il y a un problème avec Firefox, lorsqu'un marquee se trouve dans un bloc 'display: none' ou un iframe 'display: none', lorsqu'un javascript transforme ce bloc en 'display: block', le marquee ne démarre pas.
Exemple : le site http://www.accueil-paysan-dordogne.com utilise la thickbox avec un iframe (défini en display:none au départ), lorsque la page du iframe est chargée et devient visible, le marquee ne démarrerait pas si il n'y avait pas un changement de 'location' après l'événement onload.

La même chose se passe avec un <div id='test' style="display: none; ..."><marquee ...></marquee></div>
qui deviendrait actif par un évènement onMouseOver, onClick, ...
La ruse est dans ce cas de laisser le bloc en "visibility: hidden; display: block" le temps du chargement de la page, puis d'utiliser un timeout lors du onload pour basculer tous les blocs en "display: none" (le timeout est obligatoire car l'événement onload arrive trop tôt par rapport à la gestion de firefox sur cette partie), exemple http://www.paysdeneuvic24.com
L'inconvénient, c'est qu'un bloc 'display: block; visibility: hidden' prend toujours de la place dans une page et que si on utilise pas un 'position: absolute' pour le mettre à un endroit particulier, on obtient un ascenseur inutile.


Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13

Publié : 16 avr. 2008, 19:34
par jpj
Bonsoir,

Je suppose qu'il s'agit de tes sites. Je déplace dans "Développement web".

Publié : 17 avr. 2008, 02:26
par Thierry.l
oui et non, mes sites fonctionnent sur IE6/7 et Firefox,
le problème n'est pas lié à mes sites, mais bien à Firefox.
Si j'ai cité ces sites, c'était essentiellement pour donner de la matière aux experts de Firefox, bien que le principe soit simple.
L'usage de CSS dans les javascript est de plus en plus commun, or dans le cas où un 'marquee' apparait dans un bloc 'display: none' au chargement de la page et que l'on souhaite le faire apparaitre sur un événement particulier, le 'marquee' ne fonctionne pas avec Firefox, alors qu'il fonctionne avec d'autres navigateurs.
C'est donc bien l'interprétation que fait Firefox de cette combinaison, qui est un problème et qui aujourd'hui oblige à bidouiller.
Il n'y a aucun problème de fonctionnement si il n'y a pas de marquee ou que le bloc est 'normal', même si celui-ci devient 'display: none' après le chargement de la page.
A moins qu'il ne s'agissent d'un paramètre de configuration de Firefox, qui positionné pour optimiser la CPU désactive un marquee si il ne peut être visualisé, mais le problème reste entier, le fonctionnement n'est pas conforme à ce que l'on attend (notez que le fait d'agir sur scrollamount ou scrolldelay est sans effet dans le cas pré-cité, le marquee ne déroule rien).


Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13

Publié : 17 avr. 2008, 08:30
par Benoit
Attention, le fait même d'utiliser marquee est un bidouillage, c'est un élément dont le comportement n'est spécifié nulle part, même pas dans le brouillon de HTML5 (il est juste précisé que les navigateurs doivent s'attendre à tomber dessus sur certaines pages).

Publié : 17 avr. 2008, 13:30
par Thierry.l
Sans doute, sans doute (W3C - developer.mozilla.org),
mais bon, c'est quand même galère d'avoir tout le temps des différences.
Cependant, en utilisant start() et stop(), ça fonctionne sans se prendre la tête, donc je vais en rester là pour mon cas personnel, il me semble cependant qu'il y a un truc à voir pour les développeurs de Firefox.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13

Publié : 17 avr. 2008, 16:05
par Invité
Thierry.l a écrit : Cependant, en utilisant start() et stop(), ça fonctionne sans se prendre la tête
Heu, en fait non, si pour le second site, cela fonctionne sans problème,
pour le premier cela ne fonctionne que avec l'utilisation d'un timeout, c'est assez curieux.

Code : Tout sélectionner

 function recharge()   
 { 
   obj=cbeGetElementById("diapo")
   if (obj)
     {    	
     obj.scrollAmount = 3;    	
     obj.start();    	
     }
 }
 window.onload=recharge; 
...
</head>   
...
<marquee id="diapo" scrollamount=3 ...
...
plante avec 'obj.start is not a function'
alors que

Code : Tout sélectionner

function demarre()
  { 
  timeoutID = window.setTimeout("recharge()",1);
  }
  
 function recharge()   
 { 
   obj=cbeGetElementById("diapo")
   if (obj)
     {    	
     obj.scrollAmount = 3;    	
     obj.start();    	
     }
 }
 window.onload=demarre;
fonctionne parfaitement.
C'est comme si la construction de l'objet marquee ne se terminait que après l'événement onload.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14

Publié : 18 avr. 2008, 15:07
par Invité
Anonymous a écrit :C'est comme si la construction de l'objet marquee ne se terminait que après l'événement onload
C'est probablement exact, étant donné que le comportement de l'élément est défini via XBL.