probleme avec evenements mouseover et mouseout - propriété className
12 réponses
pollux
bonjour, j'ai un petit soucis
je suis en train de faire un menu CSS
pour IE j'ai besoin d'attacher des évènement onmousehover et onmouseout
sur des élements d'une liste
j'utilise cette fonction :
sfHover = function() {
var sfEls = document.getElementById("nav").getElementsByTagName("LI");
for (var i=0; i<sfEls.length; i++) {
sfEls[i].onmouseover=function() {
this.className+=" sfhover";
}
sfEls[i].onmouseout=function() {
var cl = new RegExp(" sfhover\\b");
this.className=this.className.replace(cl, "");
cl = null;
}
}
sfEls ="";
}
if (window.attachEvent) window.attachEvent("onload", sfHover);
le problême ne vient pas de la regexp, j'ai essayé avec autre chose de
moins gourmand et c'est la même chose.
Le comportement dans IE est normal au départ, menu rapide, puis devient
de plus en plus lent au fur à mesure que je passe sur les éléments de la
liste, plus je passe sur des élément et plus ça ralenti, en fait le
curseur de la souris oscille en passant du curseur normal au curseur
avec le sablier.
Il semblerait que ça soit dû a l'utilisation de la propriété className
la mémoire utilisée par IE monte et l'utilisation du processeur monte
petit à petit jusqu'à 80%
c'est un peu énorme quand même
c'est le seul script que j'utilise sur cette page
avez vous une idée de ce qui cause ce ralentissement ?
à jeter : incomplet et ne vaut pas tripette avec IE
<ul id="menu"> <li><a href="principal">Principal>
par contre là c'est ok
voir chez OpenWeb le menu intelligent
mais j'ai perdu le lien exact
-- Stephane Moriaux et son [moins] vieux Mac
pollux
ASM wrote:
pollux wrote:
ben disons que pour mon menu j'utilise des listes UL et LI il faut donc un comportement mouseover sur le li et je ne vois pas d'autres myen que de rattacher cet evenement par JS pour IE
#menu ul li { bla bla } #menu ul li a { bla bla } #menu ul li a ul { display: none; } #menu ul li a:hover ul { display: block; }
voir chez OpenWeb le menu intelligent
oui je connais par contre je ne crois pas que c'est vraiment correct d'imbriquer les <A> comme ça
Enfin bon j'en ai testé des tonnes de façons différentes et j'ai exactement le même comportement avec IE (Je précise, mon menu comporte un nombre considérable d'ITEM) IE est buggué il ne libère pas la mémoire et je n'ai pas de moyen (que je connaisse) pour la libérer moi même
ASM wrote:
pollux wrote:
ben disons que pour mon menu j'utilise des listes UL et LI il faut
donc un comportement mouseover sur le li et je ne vois pas d'autres
myen que de rattacher cet evenement par JS pour IE
#menu ul li { bla bla }
#menu ul li a { bla bla }
#menu ul li a ul { display: none; }
#menu ul li a:hover ul { display: block; }
voir chez OpenWeb le menu intelligent
oui je connais par contre je ne crois pas que c'est vraiment correct
d'imbriquer les <A> comme ça
Enfin bon j'en ai testé des tonnes de façons différentes et j'ai
exactement le même comportement avec IE (Je précise, mon menu comporte
un nombre considérable d'ITEM) IE est buggué il ne libère pas la mémoire
et je n'ai pas de moyen (que je connaisse) pour la libérer moi même
ben disons que pour mon menu j'utilise des listes UL et LI il faut donc un comportement mouseover sur le li et je ne vois pas d'autres myen que de rattacher cet evenement par JS pour IE
#menu ul li { bla bla } #menu ul li a { bla bla } #menu ul li a ul { display: none; } #menu ul li a:hover ul { display: block; }
voir chez OpenWeb le menu intelligent
oui je connais par contre je ne crois pas que c'est vraiment correct d'imbriquer les <A> comme ça
Enfin bon j'en ai testé des tonnes de façons différentes et j'ai exactement le même comportement avec IE (Je précise, mon menu comporte un nombre considérable d'ITEM) IE est buggué il ne libère pas la mémoire et je n'ai pas de moyen (que je connaisse) pour la libérer moi même