Могу ли я запросить / определить скорость двойного щелчка для пользователя веб-страницы?


Это зависит от операционной системы / пользователя. Не браузер, не сайт, а ОС решает, насколько быстрым и медленным должен быть двойной клик.

Я хотел бы использовать этот номер в своем приложении. Есть ли способ получить этот номер с помощью JS?

Простой вопрос. Возможно, это невозможно.

Спасибо

5 4

5 ответов:

Простой ответ: Нет, извините.

Лучшее, что вы могли бы сделать, было бы что-то вроде этого (пример использует jQuery просто потому, что это было быстрее написать, принцип работает, если jQuery недоступен. Также отметим, что это вполне можно было бы упростить, это как раз то, что пришло на ум в первую очередь):

var timer,
    num = 0;
$("#example").click(function() {
    /*This condition is required because 2 click events are fired for each
    dblclick but we only want to record the time of the first click*/
    if(num % 2 === 0) {
        timer = (new Date()).getTime();
    }
    num++;
}).dblclick(function() {
    var time2 = (new Date()).getTime(),
        dblClickTime = time2 - timer; 
});
К сожалению, это, вероятно, не очень полезно. Вы можете записывать значения dblClickTime и проверять их дольше всего, но это все равно очень маловероятно, что это фактическое значение, которое вы используете. после. Такого рода вещи просто не доступны через JavaScript.

Я хотел бы использовать этот номер в своем приложении. Есть ли способ получить этот номер с помощью JS?

Определенно нет-подобные вещи находятся вне сферы действия JavaScript.

Вы можете узнать значения, которые работают для двойного щелчка, попросив пользователя дважды щелкнуть, прослушать события click и посмотреть, будет ли dblclick событие уволено - я не уверен, работает ли обработка событий таким образом. Но даже если это сработает, до настоящего момента еще далеко выяснение действительной стоимости.

Добавление к ответу Джеймса Аллардайса:

В зависимости от вашей реализации и того, где вы ищете двойные клики, вы можете также проверить местоположение мыши пользователя (или, я думаю, местоположение крана). Это делается для того, чтобы избежать двойного щелчка, когда пользователь нажимает на разные части вашей страницы (опять же, зависит от реализации прослушивателя событий-если он находится только на одной кнопке, например, это, вероятно, не проблема).

Когда событие click запускает прослушиватель событий в моем примере ниже имеет две переменные e.clientX и e.clientY. Это даст вам расположение мыши. Вы можете проверить, не переместил ли пользователь свою мышь значительно с момента первого щелчка (адаптируйте соответственно к вашему коду).

document.addEventListener("click", function(e){ console.log("Mouse X: " + e.clientX + ": Mouse Y: " + e.clientY); });

Вы не хотите, чтобы он был слишком тугим, иначе пользователь никогда не сможет запустить двойной щелчок, и вы не хотите, чтобы он был слишком свободным, так что двойные щелчки срабатывают, казалось бы, случайным образом для пользователя. Может быть, начать с 25px или около того коробки вокруг первого клика (опять же это зависит от вашего приложения). Это то, что вы можете протестировать и настроить на основе вашего пользовательского интерфейса.

Я предполагаю, что у вас нет jQuery или вы не используете его, потому что я считаю, что jQuery уже может выполнить это вычисление, чтобы запустить dblclick

Почему вы не можете просто запустить таймер, когда регистрируется событие щелчка, и остановить таймер, когда происходит второй щелчок?

Это мое решение 2015 года, хотел бы видеть чистую версию js tho.

var start;
var click = null;

$(document).click(function() {
    var now = performance.now();
    start = click ? click : now;
    click = now;

}).dblclick(function() {
    alert(performance.now()-start)
});

править

Чистый JS

var start;
var click = null;

var getStart = function() {
    var now = performance.now();
    start = click ? click : now;
    click = now;
}
var getStop = function() {
    alert(performance.now()-start)
}


if (window.addEventListener) {
    window.addEventListener('click', getStart , false);
} else {
    window.attachEvent('onclick', function() {
        return(getStart.call(window, window.event));   
    });
}
if (window.addEventListener) {
    window.addEventListener('dblclick', getStop , false);
} else {
    window.attachEvent('ondblclick', function() {
        return(getStop.call(window, window.event));   
    });
}