iPad Safari отображает события мыши на события касания в графических картах - PullRequest
10 голосов
/ 03 июня 2010

Мой сайт широко использует графические карты. Изображения из страниц средневековой рукописи. К событию mouseOver тегов AREA прикреплена всплывающая подсказка, которая отображает современную типографскую транскрипцию древнего сценария для линии, над которой находится мышь.

Я только что проверил свой сайт на iPad в магазине Apple. IPad во многих отношениях доставляет удовольствие, однако мне интересно, как Apple отображает события мыши в событиях касания пальцем. У Apple, вероятно, были веские причины делать то же самое, что и они, но их выбор кажется мне нелогичным и слишком сложным.

В частности, браузер iPad Safari явно реагировал как на fingerDown, так и на fingerTap, и разными способами. Когда я касался области карты изображения, отображалась всплывающая подсказка, связанная с событием наведения мыши тега AREA, и оставалась видимой до тех пор, пока я не коснулся другого места. Когда я удерживал палец на области карты-изображения, область меняла цвет. Поэтому, если iPad Safari обнаруживает обработчик события mouseOver, он выполняет код mouseOver при нажатии | нажатия и, по-видимому, предотвращает распространение события «щелчка», так что если у вас также есть что-то связанное с событием щелчка, это не сработает? Это верно?

Но что более важно, почему fingerDown iPad-Safari не является аналогом mouseOver? FingerDown кажется более вероятным кандидатом, чем Tap при отображении события mouseOver. Я бы ожидал, что вещи будут отображаться таким образом:

 MouseClick : FingerTap (i.e. finger down and then immediately up)
 MouseOver : FingerDown (finger down and stays on the spot)

Если бы Apple считала fingerDown аналогом mouseOver, то всплывающая подсказка могла бы отображаться после FingerDown и снова становиться невидимой при fingerUp, что будет аналогом mouseOut.

Возможно, кто-то мог бы просветить меня о мыслительном процессе, который привел Apple к этим конкретным сопоставлениям событий мыши-на-ощупь? Спасибо

Ответы [ 2 ]

10 голосов
/ 28 июля 2011

Я проводил некоторые исследования, в частности, когда iPad запускает события «наведения мыши» против событий «щелчка». Когда пользователь нажимает в любом месте страницы, iPad сначала запускает событие «наведения мыши», как будто пользователь только что поместил курсор мыши в это место. Он также запускает событие «mouseout» для последнего элемента, который имел фокус. Затем, насколько я могу судить, браузер проверяет, произошли ли какие-либо изменения в DOM в результате обратного вызова события mouseover.

Если в DOM произошли изменения, браузер не запускает событие «щелчка». Если пользователь нажимает на тот же элемент во второй раз, браузер запускает событие «щелчка», но не запускает другое событие «наведения мыши».

С другой стороны, если после того, как пользователь впервые нажал на элемент, а DOM не изменился после завершения события mouseover, браузер запускает событие click, не дожидаясь второго нажатия.

0 голосов
/ 03 июня 2010

Я нашел некоторую информацию, которая частично объясняет поведение, описанное выше:

https://developer.apple.com/library/content/technotes/tn2010/tn2262/_index.html

См. Особенно раздел 5.

Похоже, что касание + удержание"выбирает" область карты изображения.Ссылка выше говорит о том, что пользовательский выбор может быть отключен, но он не говорит о том, что происходит, когда жест касания + удержание используется для элемента, где пользовательский выбор был отключен.Было бы здорово, если бы в этих обстоятельствах он стал аналогом mouseOver.

...