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 :

<body onmouseover && onkeydown = mafonction( )


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut <body onmouseover && onkeydown = mafonction( )
    salut,

    Dans une balise (par exemple: <body> ), on peut associer à un evenement donné (par exemple: onmouseover) une fonction donnée (par exemple: mafonction(param1) )

    J'aimerais savoir s'il existe un moyen pour que l'appel de la fonction ( en l'occurence: mafonction(param1) ) soit conditionné par l'association non pas d'un seul évenement mais de deux évenements simultanés.
    Par exemple, est il possible d'appeler ma fonction si et seulement si les évenements onmouseover et onkeydown sont détectés simultanément au niveau du body?

    d'avance merci

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut !

    ce n'est pas possible de le demander ainsi, cependant, tu peux toujours appeller deux fonctions, qui vérifieront que l'évenement est simultané..

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <script>
    var mouseOver = false;
    var keyDown = false;
     
    function mouseOver_keyDown()
    {
       // bla bla bla
    }
    </script>
    [...]
    <body onmouseover="mouseOver = true; if(keyDown) mouseOver_keyDown();" onmouseout="mouseOver=false" onkeydown="keyDown = true; if(mouseOver) mouseOver_keyDown();" onkeyup="keyDown=false">
    normalement, avec ceci, la fonction mouseOver_keyDown() ne sera appellée que si les deux évènements sont simultanés

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    je ne savais meme pas qu'on pouvait inclure autre chose qu'un appel de fonction dans les balises au niveau des évenements..

    la portion suivante dans le onkeydown est redondante avec le code dans le onmouseover:
    if(mouseOver) mouseOver_keyDown();
    sauf erreur de ma part
    en tous cas merci ton exemple m'a appris pas mal de truc..

  4. #4
    Futur Membre du Club
    Inscrit en
    Mai 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut dans le meme esprit:
    j'ai essayé de faire qqch dans le meme esprit, mais il y a un bug
    voir mes remarques ci-dessous...
    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
    <html>
    <head>
     
    <script language=javascript>
     
       var mouseDown = false;
     
       function fonction()
       {
          document.all("monImage").width=document.all("monImage").width +10;
       }	
    </script>
     
    </head>
     
    <body onmousemove=" if(mouseDown) fonction();" onmousedown="mouseDown=true;"  onmouseup="mouseDown=false" >
    <img id="monImage" src="exemple.jpg">
    </body>
     
    </html>
    Dans mon exemple, la fonction appelée zoome l'image.

    Quand on effectue le mousemove + mousedown en dehors de l'image, tout va bien.

    Mais lorsqu'on effectue cette combinaison sur l'image, la fonction appelée fait son travail pendant un très court laps de temps puis se bloque: le curseur de souris "interdiction" apparait alors, jusqu'à ce qu'on relache le bouton de la souris (mouseup), ce qui provoque 2 choses:
    1- un imperceptible zoom de l'image
    2- le curseur par défaut de la souris est de nouveau affiché

    donc on pourrait penser que l'evenement mouseup a été détecté.

    Mais il semble que non, car à présent si on remue la souris (mousemove) sans appuyer sur le bouton, la fonction est executée quand meme!

    On peut d'ailleurs, en modifiant le code du body comme suit, vérifier que l'evenement mouseup n'est pas détecté par celui-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    onmouseup="mouseDown=false; alert('mouse up!!')"
    Je ne vois pas où est l'erreur...

  5. #5
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    c'est parce que tu enclenches un évènement de type drag'n'drop et de ce fait, les évènements traditionnels (hors drag'n'drop) sont annulés...

    par contre je ne me souviens plus des évènements liés au DnD... dsl

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