Как захватить двойное нажатие клавиши в JavaScript?

С моей точки зрения, все постоянные взаимодействия должны быть в классах, называемых Store / Repository. Если вы хотите изменить базу данных, это повлияет только на классы Store / Repository. Я думаю, что независимость фреймворка от приложения более ценна, чем производительность. Вы можете использовать объекты областей в случае проблем с производительностью, но я думаю, что ситуация в таких ситуациях очень редкая.

10
задан ak3nat0n 3 August 2009 в 18:06
поделиться

2 ответа

При нажатии клавиши (клавиш) запишите время. Затем сравните его со временем, когда вы отметили последний раз, когда была нажата клавиша (-и).

Если разница в пределах вашего порога, считайте это двойным. В противном случае не делайте этого. Грубый пример:

var delta = 500;
var lastKeypressTime = 0;
function KeyHandler(event)
{
   if ( String.fromCharCode(event.charCode).toUpperCase()) == 'T' )
   {
      var thisKeypressTime = new Date();
      if ( thisKeypressTime - lastKeypressTime <= delta )
      {
        doDoubleKeypress();
        // optional - if we'd rather not detect a triple-press
        // as a second double-press, reset the timestamp
        thisKeypressTime = 0;
      }
      lastKeypressTime = thisKeypressTime;
   }
}
19
ответ дан 3 December 2019 в 15:22
поделиться

Есть переменная (возможно, first_press ), для которой вы устанавливаете значение true, когда происходит событие нажатия клавиши, и запустите таймер, который сбросит значение переменной до false через установленный промежуток времени (как бы быстро вы ни хотели, чтобы они нажимали клавиши).

В событии нажатия клавиши, если эта переменная истинна, вы должны дважды нажать.

Пример:

var first_press = false;
function key_press() {
    if(first_press) {
        // they have already clicked once, we have a double
        do_double_press();
        first_press = false;
    } else {
        // this is their first key press
        first_press = true;

        // if they don't click again in half a second, reset
        window.setTimeout(function() { first_press = false; }, 500);
    }
}
10
ответ дан 3 December 2019 в 15:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: