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 :

setTimeout et mouseover


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Par d�faut setTimeout et mouseover
    bonjour,
    Je rencontre un petit probl�me de syntaxe ou de fonctionnement :
    j'affiche un bloc html sur une action puis dans ce bloc j'ai ajout� :
    onmouseover="this.style.display=\'block\'" onmouseout="this.style.display=\'none\'" afin que mon bloc reste affich� tant que la souris est au dessus (c'est du javascript dans du php ce qui explique la pr�sence des \), jusque l� �a va tout fonctionne.
    Cependant, je voulais ajouter une tempo pour que le bloc ne disparaisse pas imm�diatement quand on le quitte, j'ai donc fait une fonction :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    <script type="text/javascript">
      function masque(bloc_id){
        document.getElementById(bloc_id).style.display="none";
      }
    </script>
    et modifi� mon onMouseOut en cons�quence :
    onmouseout="masque(\'block'. $rubriques['rubriques_id'] .'\');"
    �a marche toujours ! cool
    et j'ai ajout� un setTimeout et l�... �a ne va plus:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
      function masque(bloc_id){
        setTimeout(function(){document.getElementById(bloc_id).style.display="none"},500);
    ne fonctionne pas comme je voudrais car la tempo se fait � l'envers.
    Curieusement le bloc se masque tout seul � la fin de tempo sur le onMouseOver (que je n'ai pas touch�) alors que je voulais que le onMouseOut d�marre avec retard.
    vu que �a fait 4 heures que je tourne en rond sur ces deux lignes �l�mentaires, je viens demander aide.

  2. #2
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    En effet c'est curieux ^^
    Montre-nous ton html (la source g�n�r�e plutot que le php stp), peut-etre qu'on y trouvera quelque chose ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Par d�faut
    Argh, la bonne question que voil�!
    h� oui, tellement le nez dans le code que j'avais oubli� que le code en question n'est pas directement ins�r� dans la page mais passe par une fonction class javascript qui affiche le code.
    je ne vais donc pas �taler tout le code ici, �a ferait cochon, mais juste une portion qui contient le bloc qui fait le malin...
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <script type='text/javascript'>
    		<!--
    		d = new dTree('d');
    d.add(137,
                      117,
                      'Baron',
                      'http://serveur/chantperlesnoires/Edition/rubriques.php?Rubr=117&rID=137',
                      ''
                      ,'','','','',
                      '<img class="PagePlus" src="img/pixel_trans.gif" width="16" height="16" title="Options supplémentaires pour cette page" onmouseOver="this.style.cursor=\'pointer\'" onclick="document.getElementById(\'block137\').style.display=\'block\'" onmouseout="document.getElementById(\'block137\').style.display=\'none\'"><div class=\"BlocPlus\" id=\"block137\" onmouseover=\"this.style.display=\'block\'\" onmouseout=\"masque(\'block137\');\">  //.. ça continu mais c'est là que ça coince
    je vais donc aller fouiller dans ma class pour voir ce qui bloque.
    C'est vrai que du dhtml dans du javascript, �a passe mais si on ajoute un appel � une fonction externe, �a commence � �tre portnawak...

    Merci donc de ta judicieuse remarque.
    Je ne vais pas polluer ce forum avec une tartine de la fonction class dTree.
    Excellent script OpenSource soit dit en passant dont voici le copyright :
    | dTree 2.05 | www.destroydrop.com/javascript/tree/ |
    |---------------------------------------------------|
    | Copyright (c) 2002-2003 Geir Landr� |
    fonction que j'ai un peu tordue d'ailleurs pour en faire ce que je souhaite.

    Pour info, j'ai aussi essay� de placer mon setTimeout directement derri�re le onMouseOver= sans plus de succ�s.
    Le fonction add() reprend l'argument qui contient mon code foireux pour l'afficher dans la page avec un escape, il me reste donc a essayer de faire tourner le setTimeout dans ce contexte. Ce qui n'est pas gagn�.

    Si tu as une id�e lumineuse...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Par d�faut
    Alors apr�s recherche, � moins de modifier la fonction class pour entrer un argument sp�cifique pour un timeOut, je ne vois pas.
    Cette solution n'est pas � retenir car j'utilise cette class de plusieurs mani�res, et une modif l� me ferait suer.

    Question subsidiaire, existe-t-il une autre solution pour temporiser ma fonction function masque(bloc_id) pr�sent� en 1 qui n'utilise pas setTimeout() (une boucle de comptage simple)
    car cette fonction toute seule marche tr�s bien...

  5. #5
    Membre Expert
    Avatar de RomainVALERI
    Homme Profil pro
    POO�te
    Inscrit en
    Avril 2008
    Messages
    2 652
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activit� : POO�te

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Par d�faut
    Je sais que la suggestion te paraitra peut-etre �trange ^^ mais essaie de remplacer ton setTimeout() (qui pourtant est tout indiqu�) par un setInterval() (qui ne correspond pas vraiment au besoin puisqu'on ne veut pas de p�riodicit� mais une seule ex�cution diff�r�e, mais en rajoutant un clearInterval juste apres l'appel, �a ne d�clenchera qu'une seule ex�cution sans boucler. Pourquoi faire me demanderas-tu ? (pour peu que tu aies un minimum de curiosit� et de r�partie, ce dont je ne doute pas vu le ton de tes propos ^^)

    >>> eh bien, techniquement, je ne sais pas

    MAIS je me souviens que j'ai eu ce genre de souci et cette solution assez irrationnelle me fait une impression de d�j�-vu...

    ps : si on te r�pond souvent d'une mani�re aussi vague et mystique � des questions sens�es, fuis : tu es dans une secte.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    11
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 11
    Par d�faut
    bien, voil�, r�solu !
    alors le petit js qui va bien :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <script type="text/javascript">
       var a;
           function masque(bloc_id){
            a = setTimeout(function(){document.getElementById(bloc_id).style.display="none"},250);
           }
          function afficher(bloc_id){
            clearTimeout(a);
            document.getElementById(bloc_id).style.display="block";
          }
    </script>
    En fait j'appelle afficher(bloc_id) au clic sur une icone et le bloc_id est positionn� juste � cot� de l'icone. La zone de recouvrement �tant faible, j'avais plac� un onMouseOut=masque(bloc_id) sur l'ic�ne et le bloc.
    En fait au d�part, le mouseOut sur l'ic�ne ne passait pas par la fonction masque(). Curieusement il intervenait apr�s le mouseOver sur le bloc, ce qui faisait que �a disparaissait de mani�re erratique.

    Merci Romain de tes bonnes id�es.
    J'ai essay� le setInterval() �a fonctionne aussi � un petit d�tail que je n'ai pas cherch� � creuser : au bout de quelques clics (affichage du bloc) et effacement, le clic n'affiche plus le bloc.
    Pas d'info dans la console d'erreur, pas d'erreur apparente...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Etiquette sur survol de la souris (mouseover)
    Par Philofish dans le forum G�n�ral JavaScript
    R�ponses: 4
    Dernier message: 26/08/2005, 11h06
  2. setTimeOut ne peu pas appeler une fonct. et appeler une var?
    Par bywazy dans le forum G�n�ral JavaScript
    R�ponses: 8
    Dernier message: 15/06/2005, 09h56
  3. Changement de CSS lors d'un mouseover
    Par jeff37 dans le forum Mise en page CSS
    R�ponses: 4
    Dernier message: 27/05/2005, 16h03
  4. [Ultra d�butant] Probl�me avec setTimeout()
    Par tails dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 25/05/2005, 16h05
  5. probleme avec setTimeout
    Par barbarello dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 12/11/2004, 13h45

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