私はJavascript Webアプリを作成していますが、一生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) で問題なく動作するはずだと言っていますが、最初のリスナーは起動しないようです。
更新: Android 2.1 を実行している Samsung Galaxy S でテストしていることに言及する必要があります。