IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Problème de clignotement sous IE


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Problème de clignotement sous IE
    Bonjour à tous,

    Je suis entrain de faire un petit script pour faire des boutons en javascript et css. Voilà mon code source:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <html>
    <head>
    <title>Test</title>
    <style>
    .test {
    background: url('images/fond.jpg');
    padding: 10px;
    }
     
    .test2 {
    background: #ff0000;
    padding: 10px;
    }
    </style>
    <script>
    function change() {
    	var bouton = document.getElementById("bouton");
    	bouton.getElementsByTagName("td")[0].setAttribute("className", "test");
    	bouton.getElementsByTagName("td")[1].setAttribute("className", "test");
    	bouton.getElementsByTagName("td")[2].setAttribute("className", "test");
    }
     
    function rechange() {
    	var bouton = document.getElementById("bouton");
    	bouton.getElementsByTagName("td")[0].setAttribute("className", "test2");
    	bouton.getElementsByTagName("td")[1].setAttribute("className", "test2");
    	bouton.getElementsByTagName("td")[2].setAttribute("className", "test2");
    }
    </script>
    </head>
     
    <body>
    <table id="bouton" onmouseover="change()" onmouseout="rechange()" cellpadding="0" cellspacing="5" border="0">
    <tr>
    <td>L</td>
    <td>Test</td>
    <td>R</td>
    </tr>
    </table>
    </body>
    </html>
    Un bouton est en fait un tableau avec 3 cellules: la première concerne le bord gauche, la deuxieme le centre avec le texte du bouton, la toisième le bord droit. Le problème apparait uniquement sur IE et pas sur Firefox, je tiens à la préciser. Il intervient lorsque je veux mettre une image en fond lors du onmouseover. Lorsqu'on déplace alors la souris sur le bouton (et plus précisément lors du passage d'un td à un autre), il y a un effet de clignotement de l'image de fond, assez désagréable. Quelqu'un saurait-il d'où ça vient et s'il y a une solution pour y remédier ?

    Merci =)

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    tout d'abord une initialisation des td s'impose soit avec le classnale dasn les balises soit avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    td {background: #ff0000;
    padding: 10px;
    }
    ensuite as tu un preload de l'image ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Je viens d'initialiser les td, j'ai aussi préchargé l'image, le résultat n'est pas mieux. En cherchant un peu sur les byzareries d'IE, j'ai trouvé en fait que lorsqu'il y a des images en fond qui sont ammenées à être changées, IE ne les garde pas en cache et les recharge à chaque fois. Le clignotement serait alors dû au temps que le serveur met pour transmettre l'image à chaque fois.

    Il y a moyen de modifier ce comportement sous IE: Outils > options internet > fichiers internet temporaires > paramètres et il faudrait choisir Automatiquement pour bien faire. Seul problème, je ne crois pas que cette option soit sélectionné par défaut sur internet explorer... il recharge à chaque fois l'image :/

    Une solution ?

  4. #4
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Utilise un petit truc à moi :
    1) En tant que variable globale :
    2) La ou tu faisait rechange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rechange_timer= setTimeout('rechange()',100)
    3) La ou tu faisait change :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    try { clearTimer(rechange_timer) } finally { change() }

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    ne pas mettre d'image de fond mais une balise image ...

  6. #6
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Citation Envoyé par SpaceFrog
    ne pas mettre d'image de fond mais une balise image ...
    Le problème n'est pas la...
    En fait, il y a un petit espace entre chaque TD, et quand la souris entre dans ce petit espace, les navigateurs considèrent qu'elle sort du controle
    De ce fait, la fonction rechange est exécutée
    Comme la souris continue son déplacement, elle arrive dans la 2e TD, d'ou l'execution de change.
    Resultat : il y a un leger sintillement, du au momment de battement entre rechange et change...
    Pour eviter cela, j'utilise le timer... Ainsi, je laisse 100ms à la souris pour "re"-rentrer dans le controle
    Une autre methode, c'est d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    border=0 cellpadding=0 style="boder: none 0px transparent"
    mais je n'ai jamais testé

    __________________
    En passant soit dit j'aime bien ton nouvel avatar !

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    J'ai pas compris comment on implentait la technique du timer
    J'ai essayé mais ça clignote toujours voir même plus qu'avant.

    Sinon j'ai regardé sur le nouveau Yahoo! Mail, ils ont des boutons similaires à ce que je voudrais faire. Et ils ont réussi à tout bien faire fonctionner sur IE (en même temps c'est Yahoo me direz vous :p).

    J'ai regardé un peu leur code source, et dans une balise td du bouton, ils ont une classe dans le genre: <td class=".monBouton .monBoutonOver">Bouton</td>

    Dans la classe .monBouton, ils définissent l'image de fond avec background-image. Cette image est en fait une image double (elle contient l'image normale, et au dessus l'image qui apparait quand on passe la souris). Ils initialisent la position du background à 0px 0px. Puis dans la classe .monBoutonOver, il apparait uniquement le background-position, qui décale le fond de n pixel pour faire apparaitre l'autre image. bref jusque là, rien de très ennuyeux.

    Le truc que j'ai du mal à piger, c'est le fait d'activer .monBoutonOver seulement lorsque la souris passe sur l'élément. Je pense que l'attitude normale du script actuel aurait tendance à attribuer au TD les éléments de la classe .monBouton, puis les éléments de la classe .monBoutonOver (arrêtez moi si jme trompe). Si vous y voyez plus clair, faites signe ^^.

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    ben si le problème vient du passage sur le bordures pourquoi ne pas declencher uniquement sur le tr .... et pas sur les td ... ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    En fait, les TD me servent ici à pouvoir placer des backgrounds différents dans chacune des cellules (par exemple des arrondis aux extrémités). Ce qui ne serait pas possible en utilisant la balise TR.

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    en fait je veux dire conserver les background des td mais utiliser seulement le onmouseover et onmouseout des tr ...

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    sinon bordercollapse ça n'aiderait pas ?

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Salut,

    Pour bordercollapse, pas plus de résultat. Même en essayant de mettre toutes les bordures du tableau à 0, l'effet de clignotement apparait toujours lorsqu'on passe d'un td à un autre. Sinon, les onmouseover et onmouseout ne sont pas sur les TD, je les ais mis sur la balise <table> (voir exemple du code ci-dessus).

    Merci de ta contribution en tout cas =)
    Si vous avez d'autres propositions n'hésitez pas, je cherche aussi de mon côté, si je trouve quelquechose d'interessant, je ne manquerai pas à le faire savoir =)

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Il ne reste que la solution de fremy, c'est a dire retarder le declenchement du swap au moyen d'un setTimeout de sorte que lorsque le curseur passe sur une bordure il attende de voir si le curseur arrive sur un autre td ...
    si le curseur arrive sur un autre td, on annule le changement, sinon le changement s'opère ...

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Je ne vois pas trop comment son code fonctionne... Pourrais tu m'aider ? Je ne vois pas où il détecte que le curseur arrive sur un autre td :/

    Merci

  15. #15
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    suffit de lancer le setTimeout sur le onmouseout du td et le clearTimeout sur le onmousover ....

Discussions similaires

  1. [Install] Problème de lancement sous debian sid
    Par SoaR245 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 18/02/2004, 10h01
  2. problème de compilation sous visual C++
    Par fabmili dans le forum MFC
    Réponses: 4
    Dernier message: 08/02/2004, 19h52
  3. Problème d'include sous Dev-c++ 4.9.8.0
    Par Argonz dans le forum Dev-C++
    Réponses: 16
    Dernier message: 20/11/2003, 17h36
  4. Problème avec CopyDir sous D5
    Par Houben Jacques dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 22h02
  5. Help :Problème de clignotement
    Par LE CHAKAL dans le forum Composants VCL
    Réponses: 6
    Dernier message: 14/08/2002, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo