次のjqueryイベント処理関数があります。
$('.target').on('dblclick', function() {
//respond to double click event
});
私の問題は、このイベントハンドラーがタッチデバイス(iPhone、iPad ...)で動作しないことです。タッチデバイスで動作し、フルサイズのデバイスで快適なダブルクリック使用を可能にするdblclick
の信頼できる代替品を誰でも推奨できますか?
最終的に、モバイルとデスクトップの両方で動作するカスタムのダブルクリック機能を作成しました。
var touchtime = 0;
$(".target").on("click", function() {
if (touchtime == 0) {
// set first click
touchtime = new Date().getTime();
} else {
// compare first click to this click and see if they occurred within double click threshold
if (((new Date().getTime()) - touchtime) < 800) {
// double click occurred
alert("double clicked");
touchtime = 0;
} else {
// not a double click so set as a new first click
touchtime = new Date().getTime();
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<div class="target">Double click me</div>
または、ここに JSfiddle Demo があります。
要素に複数のイベントリスナーをバインドし、タッチデバイスに対してjQueryのtap
イベントを使用できます。
$( ".target" ).on({
dbclick: function() {
//do stuff
}, touch: function() {
//do the same stuff
}
});
これをindex.htmlに追加します
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
モバイルズーム機能がJqueryのdblclickを無効にすることがわかりました。基本的には、ビューポートが効果的にズームを停止することはないという。これはChromeを実行しているNexus 5で機能します。
@JRulleのマークされた答えは、1つのオブジェクトに対してのみ機能するようです。同じクラスのインスタンスが多数ある場合、それらは1つのオブジェクトと見なされます。例を参照してください。
中央の例
私の解決策はそのような場合にうまくいくようです
var touchtime = 0;
$('.target').on('click', function() {
if (touchtime == 0) {
touchtime = new Date().getTime();
} else {
if (((new Date().getTime()) - touchtime) < 800) {
alert("double clicked");
touchtime = 0;
} else {
touchtime = 0;
}
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<p class="target">click me!</p>
<p class="target">then click me!</p>
<a href="#">click link</a>
上記のコードを改善しましたが、シングルクリック後にダブルクリックを検出できませんでした。
var touchtime = 0;
$(".target").on("click", function() {
if (((new Date().getTime()) - touchtime) < 500) {
alert("double clicked");
}
touchtime = new Date().getTime();
});
このコードは、すべてのダブルクリックを検出します。また、タッチ時間を500ミリ秒(標準のダブルクリック時間)に短縮しました。
解決策をありがとう-タイムアウトを追加して、別々のイベントとして扱うことができた
var touchtime = 0;
var delay = 800;
var action = null;
$(".target").on("click", function() {
/*Double Click */
if((new Date().getTime() - touchtime) < delay){
clearTimeout(action)
alert('dbl');
touchtime=0;
}
/* Single Click */
else{
touchtime = new Date().getTime();
action = setTimeout(function(){
alert('single');
},delay);
}
}));
私はそれをテストしていませんが、HTMLのヘッダーセクションに以下を追加する価値があるかもしれません<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
あたり: 「user-scalable = no」へ、または「user-scalable = no」へ