13

したがって、次のような要素があります。

 ____________________________________
/                                    \
|                                    |
|                                    |
+------------------------------------+
|                                    |
|                                    |
|                                    |
+------------------------------------+
|                                    |
|                                    |
\____________________________________/

次のように、タッチスタートリスナーをアタッチしました。

    other_options.addEventListener('touchstart', function(e) {
        event.preventDefault();
    }, false);

私がやりたいこと、そして私はすでに「e」の値を調べましたが、私がやりたいことをするのに十分に一貫した値を見つけることができません(値を試してみると、値が正しくないように思えます)。

私はそれらの行のサイズを知っています。touchstart イベントが発生した場所の Y 座標を取得できるようにしたいだけで、要素の上位座標は 0 です。そうすれば、 Math.floor(y / ROW_SIZE) は touchstart イベントが開始された行を教えてくれます。

4

2 に答える 2

17

このようにアクセスする必要があります。

e.touches[0].clientX/clientY.

タッチ数とタッチ情報は、e.touches 経由でアクセスできます。

この FAQ を見てください。

タッチ イベントで x/y 座標を取得する方法は?

ここにタッチイベントのドキュメントがあります。

ちなみに、イベントはウィンドウのみを基準にした x/y 座標を返します。それを変えることはできません。これでできること。top= 0 - element.top; x= clientx-top.

于 2013-01-23T13:32:18.890 に答える
12

メソッドを使用getBoundingClientRect()して、要素の上と左の値を計算することをお勧めします。

上記のアプローチではelement.top、要素が別のコンテナ内にある場合、ビューポートを基準にして上と左の値が得られない場合があります。

したがって、要素に対するタッチ座標を計算するには、次のようにします。

var rect = element.getBoundingClientRect();
xCoordinate = event.touches[0].clientX - rect.left;
yCoordinate = event.touches[0].clientY - rect.top;

getBoundingClientRect()メソッドの詳細については、ここをクリックしてください

于 2016-03-01T01:11:11.533 に答える