Получение (нежелательного) события перемещения мыши при нажатии на изображение - PullRequest
1 голос
/ 30 ноября 2009

У меня есть HTML-страница, на этой странице есть несколько изображений, когда пользователь нажимает на одно из этих изображений, его заменяет другое изображение.

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

Функция ChangePic ():

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

У меня также есть ярлык на странице, который отображает текущее действие, например Перемещение / правый щелчок / левый щелчок / двойной щелчок.

В моей загрузке HTML-страницы, у меня есть:

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

Показать действие просто меняет метку. ShowKeysDown проверяет, какая кнопка была нажата, а затем вызывает ShowAction. (Строки в этом вызове предназначены для многоязычной поддержки)

Проблема, с которой я столкнулся, заключается в том, что когда пользователь щелкает изображение одним щелчком левой кнопки мыши, изображение корректно изменяется, метка меняется на «Левый щелчок» в течение доли секунды, а затем изменяется на «Переместить». «хотя никакого перемещения не произошло. Я подумал, что, возможно, один щелчок по изображению считается началом процедуры перетаскивания, но я не уверен.

Редактировать: когда пользователь не нажимает на изображение, а просто в некотором случайном пробеле, метка правильно отображается как «Левый щелчок», пока он не переместит курсор, а затем изменится на «Переместить». Это поведение, которое я хотел бы при нажатии на изображения.

Спасибо за ваше время.

Примечание: это должно работать только в IE, так как это часть HTMLDialog в mfc.

Ответы [ 3 ]

1 голос
/ 30 ноября 2009

Я предполагаю, что при взаимодействии с пользователем происходит следующее событие:

  1. пользователь наводит курсор мыши на изображение - onmousemove - отображает «Переместить» на метке
  2. пользователь нажимает на изображение (щелчок левой кнопкой мыши) - onmousedown - диаплется «левый щелчок» на этикетке
  3. пользователь перемещает мышь из изображения - onmousemove - отображает 'Move' на этикетке

Onmousemove будет срабатывать, даже если пользователь перемещает мышь на пиксель на изображении.

Таким образом, решение вашей проблемы будет:

  1. иметь глобальный флаг
  2. Установите его в обработчике события onmousedown
  3. Проверьте этот флаг в обработчике события onmousemove, если он не установлен, то на метке отображается «Move», а если он установлен, то ничего не делайте
  4. Имейте обработчик события onmouseout, сбросьте флаг в этом обработчике событий, поэтому снова при каждом запуске onmousemove он будет проверять флаг, и так как он не был установлен событием click, onmousemove будет отображать 'Move' на метке.

Надеюсь, это то, что вы хотели как поведение !!!

0 голосов
/ 30 ноября 2009

Почти невозможно щелкнуть объект без получения события mousemove ... вам нужно как-то отфильтровать его - например, если ход слишком мал, игнорируйте его ...

0 голосов
/ 30 ноября 2009

Поправьте меня, если я ошибаюсь ... но вы используете событие onmousemove. Разве поведение, которое вы испытываете, не является абсолютно нормальным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...