Я создаю веб-приложение на Javascript, и я не могу на всю жизнь запустить событие touchstart
.Я получаю события touchmove
и touchend
без проблем.Это проблема, потому что, на мой взгляд, лучший способ различить нажатие и движение прокрутки - обнулить счетчик события touchstart
, обновить его на touchmove
, а затем сравнить на touchend
.Я делаю это, так что я могу сделать некоторые действия в конце нажатия, но не прокрутки.Например, было бы очень странно, если бы после того, как вы прокрутили этот список, открылась страница для элемента в списке, но было бы неплохо иметь возможность нажать на элемент, чтобы открыть его страницу.
Вот что у меня есть:
// FIXME: this doesn't seem to ever fire
el.addEventListener('touchstart', function(e) {
// make sure that at the start of every touch we're not considered to be moving
alert("Touch starting");
app.__touchMoving = 0;
}, false);
el.addEventListener('touchmove', function(e) {
app.__touchMoving++;
}, false);
el.addEventListener('touchend', function(e) {
alert("Touch ended. We moved beforehand this many times: " + app.__touchMoving);
// if we are moving
if (app.__touchMoving > 0) {
// stop, since we're dragging, not tapping
return false;
}
// else we're no longer moving, so it was a tap
}
Я никогда не вижу предупреждение touchstart
.Если я прокручу, touchend
сработает, и app__touchMoving будет иметь какое-то приличное значение.Кстати, я заметил, что иногда touchend
может срабатывать несколько раз.
Я что-то здесь упускаю?Многие люди говорят, что на Android (и iPhone) это должно прекрасно работать, но первый слушатель никогда не срабатывает.
Обновление: Я должен упомянуть, что я тестировал наSamsung Galaxy S под управлением Android 2.1.