2017-08-10 7 views
1

リアクションアプリにdivがあり、クリックとタッチの両方を処理する必要があります。しかし、モバイルでタップすると、両方のイベントが発生します。リアクションonClickとonTouchStartが同時に起動しました

モバイルでスワイプしたり、通常のブラウザをクリックしてもうまくいけば、それぞれの場合に1つのイベントだけが起動されます。

両方のイベントを発生させないようにこのタップの問題を処理するにはどうすればよいですか?

<div 
    className={myClasses} 
    onClick={this.myHandle} 
    onTouchStart={this.myHandle} 
    >&nbsp; 
</div> 
+0

なぜTouchStartとクリックの両方が必要なのですか?クリックはモバイルとデスクトップの両方で呼び出されます。 ライフサイクルは通常:touchstart(マウス) - > touchend(mouseup) - >をクリックします。 あなたがtouchstartのために明示的に何かする必要がなければ、私はそれを落とすだけです。 – PiniH

+0

私はあなたの意見を持っています。私は前のうちの1つしか持っていませんでしたが、ユーザーがスワイプすると、クリックは発生せず、タッチイベントのみが発生します。これは、ユーザーがスライドするために「次のカード」をクリックまたはスワイプすることができるカルーセルのようなものです。 – Yuri

+0

これらのコントロールを使った私の経験から、これらは同時に発火しないと私に伝えられますか?状況を正しく分析していると確信していますか? ここでevent.preventDefault()は役に立ちますか? – Shammoo

答えて

1

タッチとマウスの間で同様のイベントを使用してこの問題を解決しました。 touchStart/mouseDownまたはtouchEnd/mouseUpを押します。それは、それぞれの状況に応じて、1つまたは別のものを発火させる。

<div 
    className={myClasses} 
    onMouseUp={this.myHandle} 
    onTouchEnd={this.myHandle} 
    >&nbsp; 
</div>