Question

J'ai une page html. Sur cette page, il y a des images. Lorsque l'utilisateur clique sur l'une de ces images, une image différente la remplace.

<img style="cursor:hand" src="../_Img/click_me.png" onclick="ChangePic();">

La fonction ChangePic ():

function ChangePic() {
var el = event.srcElement;
el.src = '../_Img/Clicked.png';}

J'ai également sur la page une étiquette qui affiche l'action en cours, par exemple. Déplacer / clic droit / clic gauche / double clic.

Dans ma surcharge de la page html, j’ai:

onmousemove="ShowAction('Move');" onmousedown="ShowKeysDown('Left','Middle','Right','click');"

Show action change simplement le libellé. ShowKeysDown vérifie quel bouton a été cliqué, puis appelle ShowAction. (Les chaînes de cet appel sont destinées à la prise en charge multilingue)

Le problème que je rencontre est que lorsqu'un utilisateur clique sur l'image d'un simple clic gauche, l'image change correctement, le libellé est modifié en "Clic gauche" pendant une fraction de seconde, puis en "Déplacer". 'même si aucun déménagement n'a eu lieu. Je pensais qu’un simple clic sur une image pouvait être considéré comme le début d’une procédure de glisser-déposer, mais je n’en suis pas sûr.

Modifier: lorsqu'un utilisateur ne clique pas sur une image, et uniquement dans des espaces aléatoires, l'étiquette est correctement affichée en tant que "clic gauche" jusqu'à ce qu'ils déplacent le curseur, puis elle se transforme en "Déplacer". C’est le comportement que je voudrais quand je clique sur les images.

Merci de votre temps.

Remarque: cela ne doit fonctionner que dans IE car il fait partie d'un HTMLDialog dans mfc.

Était-ce utile?

La solution

Je suppose que l'événement suivant se produit par interaction de l'utilisateur:

  1. l'utilisateur déplace la souris sur l'image - onmousemove - affiche "Déplacer" sur l'étiquette
  2. l'utilisateur clique sur l'image (clic gauche) - onmousedown - diaplsya 'Clic gauche' sur l'étiquette
  3. l'utilisateur déplace la souris hors de l'image - onmousemove - affiche "Déplacer" sur l'étiquette

Onmousemove déclenche même l'utilisateur déplace la souris d'un pixel sur l'image.

La solution à votre problème serait donc:

  1. avoir un drapeau global
  2. Définissez-le dans le gestionnaire d'événements de onmousedown
  3. Vérifiez cet indicateur dans le gestionnaire d'événements de onmousemove. S'il n'est pas défini, affichez "Déplacer" sur le libellé. S'il est défini, ne faites rien.
  4. Avoir un organisateur d’événement de onmouseout, réinitialiser l’indicateur dans ce gestionnaire d’événements. Ainsi, chaque fois que onmousemove sera déclenché, il vérifiera l’indicateur et, comme il n’a pas été défini par un événement click, onmousemove affichera «Déplacer» sur l’étiquette.

J'espère que c'est ce que vous vouliez comme comportement !!!

Autres conseils

Corrigez-moi si je me trompe ... mais vous utilisez l'événement onmousemove ... Le comportement que vous rencontrez n'est-il pas absolument normal?

Il est presque impossible de cliquer sur un objet sans obtenir l'événement mousemove ... vous devez le filtrer d'une certaine manière, comme si le mouvement était trop petit, ignorez-le ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top