JS: Как работает свойство event.touches? - PullRequest
10 голосов
/ 01 ноября 2011

Я не понимаю, как использовать свойство event.touches. Например, чтобы получить количество пальцев на iPad / iPhone, вы должны использовать

event.touches.length

Тогда почему этот пример кода не работает?

$('.image').bind('touchstart', function(event) {
  alert(event.touches.length);
});

Но это работает:

$('.image').bind('touchstart', function() {
  alert(event.touches.length);
});

Не должно ли быть наоборот?

1 Ответ

17 голосов
/ 01 ноября 2011

Во втором случае вы обращаетесь к глобальному (и необработанному) объекту браузера event, а не к jQuery-специфическому (в браузерах, которые поддерживают глобальный event, не все это делают - Firefox не делает ')t, например, - потому что это вещь Microsoft, которую скопировали только некоторые другие).

Звучит так, будто jQuery не передает свойство touches в свой пользовательский объект события.Как описано в документации к объекту события , вы можете использовать event.originalEvent в своем первом примере для доступа к «особым свойствам», которые у него есть, но при этом получать преимущества от нормализованного объекта события jQuery, например:

$('.image').bind('touchstart', function(event) {
  alert(event.originalEvent.touches.length);
});

... или вы можете указать jQuery скопировать это свойство, выполнив это один раз в начале вашего скрипта:

jQuery.event.props.push("touches");

... после чего ваш первый пример должен начать работать.


Примечание: если вы не используете jQuery Touch , вы можете посмотреть на него.Я предполагаю, что в дополнение к другим вещам, которые он делает, он добавляет свойство touches, как показано выше (но это только предположение).

...