これがダブルクリックの場合:
window.addEventListener("dblclick", function(event) { }, false);
トリプルクリックをキャプチャするにはどうすればよいですか?これは、Google Chromeの固定されたタブ用です。
3回のクリックを連続してキャプチャするネイティブイベントが存在しないため、独自のトリプルクリック実装を作成する必要があります。幸いなことに、最新のブラウザにはevent.detail
があり、これは MDNのドキュメントに次のように記述されています :
短時間に発生した連続したクリックの数。1ずつ増加します。
つまり、このプロパティの値をチェックして、それが3
かどうかを確認できます。
window.addEventListener('click', function (evt) {
if (evt.detail === 3) {
alert('triple click!');
}
});
IE 8のサポートが必要な場合、最善のアプローチは、ダブルクリックをキャプチャしてから、トリプルクリックをキャプチャすることです。たとえば、次のようになります。
var timer, // timer required to reset
timeout = 200; // timer reset in ms
window.addEventListener("dblclick", function (evt) {
timer = setTimeout(function () {
timer = null;
}, timeout);
});
window.addEventListener("click", function (evt) {
if (timer) {
clearTimeout(timer);
timer = null;
executeTripleClickFunction();
}
});
これは、古いIEブラウザがダブルクリックに対して2つの連続したクリックイベントを発生させないためです。 IE 8のattachEvent
の代わりにaddEventListener
を使用することを忘れないでください。
DOMレベル2以降、マウスクリックハンドラーを使用して、イベントのdetail
パラメーターを確認できます。
UIEventから継承された詳細属性は、ユーザーの操作中に同じ画面上の場所でマウスボタンが押されて離された回数を示します。ユーザーがこのアクションを開始すると、属性値は1になり、押してから離すという完全なシーケンスごとに1ずつ増加します。ユーザーがマウスダウンとマウスアップの間でマウスを動かすと、値は0に設定され、クリックが発生していないことを示します。
したがって、detail === 3
の値は、トリプルクリックイベントを提供します。
仕様の詳細については http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-MouseEvent をご覧ください。
@Nayukiのおかげで https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail -WIPであるDOM3拡張機能 https:// w3c .github.io/uievents /
これが実際のトリプルクリックイベントです。3つのクリックすべてが等間隔で発生したときにのみトリガーされます。
// Default settings
var minClickInterval = 100,
maxClickInterval = 500,
minPercentThird = 85.0,
maxPercentThird = 130.0;
// Runtime
var hasOne = false,
hasTwo = false,
time = [0, 0, 0],
diff = [0, 0];
$('#btn').on('click', function() {
var now = Date.now();
// Clear runtime after timeout fot the 2nd click
if (time[1] && now - time[1] >= maxClickInterval) {
clearRuntime();
}
// Clear runtime after timeout fot the 3rd click
if (time[0] && time[1] && now - time[0] >= maxClickInterval) {
clearRuntime();
}
// Catch the third click
if (hasTwo) {
time[2] = Date.now();
diff[1] = time[2] - time[1];
var deltaPercent = 100.0 * (diff[1] / diff[0]);
if (deltaPercent >= minPercentThird && deltaPercent <= maxPercentThird) {
alert("Triple Click!");
}
clearRuntime();
}
// Catch the first click
else if (!hasOne) {
hasOne = true;
time[0] = Date.now();
}
// Catch the second click
else if (hasOne) {
time[1] = Date.now();
diff[0] = time[1] - time[0];
(diff[0] >= minClickInterval && diff[0] <= maxClickInterval) ?
hasTwo = true : clearRuntime();
}
});
var clearRuntime = function() {
hasOne = false;
hasTwo = false;
time[0] = 0;
time[1] = 0;
time[2] = 0;
diff[0] = 0;
diff[1] = 0;
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Click button three times with equal interval
<button id="btn">Click me</button>
また、私は jquery plugin TrplClick と書いて、「trplclick」イベントを有効にします
正しく実行すれば非常に簡単です。シングル、ダブル、トリプルなどのクリックをキャッチすることもできます。プレーンなJavaScript、カスタマイズ可能なクリック遅延(タイムアウト):
var clicks = 0;
var timer, timeout = 350; // time between each click
var doubleClick = function(e) {
console.log('doubleClick');
}
var tripleClick = function(e) {
console.log('tripleClick');
}
// click timer
yourcontainer.addEventListener('click', function(e) {
clearTimeout(timer);
clicks++;
var evt = e;
timer = setTimeout(function() {
if(clicks==2) doubleClick(evt);
if(clicks==3) tripleClick(evt);
clicks = 0;
}, timeout);
});
疑似コード:
var clicks = 0
onclick:
clicks++;
setTimer(resetClicksToZero);
if clicks == 3: tripleclickdetected(); clicks = 0;
私はJavaScriptコードエディターで作業しており、トリプルクリックをリッスンする必要がありました。ほとんどのブラウザーで機能するソリューションは次のとおりです。
// Function to get mouse position
var getMousePosition = function (mouseEvent) {
var currentObject = container;
var currentLeft = 0;
var currentTop = 0;
do {
currentLeft += currentObject.offsetLeft;
currentTop += currentObject.offsetTop;
currentObject = currentObject.offsetParent;
} while (currentObject != document.body);
return {
x: mouseEvent.pageX - currentLeft,
y: mouseEvent.pageY - currentTop
}
}
// We will need a counter, the old position and a timer
var clickCounter = 0;
var clickPosition = {
x: null,
y: null
};
var clickTimer;
// The listener (container may be any HTML element)
container.addEventListener('click', function (event) {
// Get the current mouse position
var mousePosition = getMousePosition(event);
// Function to reset the data
var resetClick = function () {
clickCounter = 0;
var clickPosition = {
x: null,
y: null
};
}
// Function to wait for the next click
var conserveClick = function () {
clickPosition = mousePosition;
clearTimeout(clickTimer);
clickTimer = setTimeout(resetClick, 250);
}
// If position has not changed
if (clickCounter && clickPosition.x == mousePosition.x && clickPosition.y == mousePosition.y) {
clickCounter++;
if (clickCounter == 2) {
// Do something on double click
} else {
// Do something on triple click
resetClick();
}
conserveClick();
} else {
// Do something on single click
conserveClick();
}
});
Firefox 12、Google Chrome 19、Opera 11.64、Internet Explorer 9でテスト済み
このアプローチでは、ユーザーがカーソルの位置を変更していないかどうかを確認します。シングルクリックまたはダブルクリックしても、何かを実行できます。このソリューションがトリプルクリックイベントリスナーを実装する必要があるすべての人に役立つことを願っています:)