Я играю с событиями touchstart и touchend на моем iPhone. Я создал образец страницы с div, который, если вы коснетесь его и прокрутите страницу, он должен вернуть координаты y начальной и конечной позиций.
ссылка: http://jsbin.com/ibemom/2
jQuery:
var touchStartPos;
$('.theDiv')
.bind('touchstart', function(e){
touchStartPos = e.pageY;
})
.bind('touchend', function(e){
alert(touchStartPos + ' | ' + e.pageY)
})
Однако, когда я загружаю эту страницу на свой iPhone, предупреждение продолжает сообщать обоим значениям как нулевые. Кто-нибудь видит что-то не так с тем, что у меня есть?
ОБНОВЛЕНИЕ:
Я наткнулся на этот фрагмент кода в проекте jQuery Mobile: https://github.com/jquery/jquery-mobile/issues/734
Из него вышло замечание:
// (in iOS event.pageX and event.pageY are always 0 )
Здесь не сказано почему , но, по крайней мере, я нашел кого-то еще, кто видит то же самое. Покопаемся в образце кода на этой странице, чтобы увидеть, есть ли решение.
ОБНОВЛЕНИЕ II:
Итак, после просмотра примера кода в приведенной выше ссылке, похоже, будет возвращено реальное значение:
e.originalEvent.touches[0].pageY
Загвоздка в том, что теперь я понимаю, что это не совсем то, что мне нужно. Он возвращает смещение по оси Y области, которой я коснулся в объекте, к которому я прикрепил событие В ОТНОШЕНИИ HTML-ДОКУМЕНТА ... а не в окне браузера.
Моя цель - выяснить, где на экране касание началось, а где закончилось ... и затем сравнить значения. Если они немного отличаются, то мы предполагаем, что было выполнено смахивание ... а не касание.
ОБНОВЛЕНИЕ III:
Я также нахожу ссылки на эти примеры:
e.originalEvent.touches[0].pageX
event.targetTouches[0].pageY
Хотя я тоже не могу заставить их работать. Оба возвращают неопределенные ошибки.
ОБНОВЛЕНИЕ IV:
Похоже, одним из решений является отслеживание смещения () в самом документе. Я могу применить событие touchend к документу, а затем проверить его смещение.
Проблема в том, что мое событие touchend сначала срабатывает для элемента на моей странице, а ЗАТЕМ оно запускает его в документе (всплытие) . Поэтому я не могу на самом деле определить, было ли это прикосновением или смахиванием, ПРЕЖДЕ чем мне нужно выяснить, что делать с событием touchend объектов.
Все еще обдумываю это ...