Jestem dość ciekawy dla funkcji keyup i keydown.

Chciałem wyłączyć klucze przez 2 sekundy, a następnie złączenie ich. Ustawiłem funkcję setTimeout, aby upewnić się, że włączenie go w ramach tej funkcji {X1}}.

Problem polega na tym, że staram się dowiedzieć, jak go wyłączyć. Próbowałem
e.preventDefault();
.. Próbowałem wysłać fałszywe plecy nadal bez szczęścia.

Czy jest coś, czego mi brakuje?

Procedura obsługi zdarzeń:

var keysDown = {},
ignore = false,tId;

addEventListener("keydown", function(e) {
  if (ignore) return false;
  keysDown[e.keyCode] = true;
}, false);

addEventListener("keyup", function(e) {
  if (ignore) return false;
  delete keysDown[e.keyCode];
}, false);

Funkcjonować:

function doStuff() {
  hero.y = 0;   
  ignore=true;
  tId = setTimeout(function() { ignore=false; continueExecution() }, 2000) //wait two seconds before continuing

}



function continueExecution()
{   

    hero.y = -281;
}
0
FreedomPride 26 czerwiec 2017, 19:55

3 odpowiedzi

Najlepsza odpowiedź

Twoje funkcje EventListener nie mogą być anonimowe:

function keyDown(e) {
    keysDown[e.keyCode] = true;
}
addEventListener("keydown",keyDown,false);

function keyUp (e) {
    delete keysDown[e.keyCode];
}
addEventListener("keyup",keyUp,false);

Teraz możesz usunąć słuchacze:

removeEventListener("keyup",keyUp,false);

Wszyscy razem:

function keyDown(e) {
    keysDown[e.keyCode] = true;
}
function keyUp (e) {
    delete keysDown[e.keyCode];
}

function setEvents(){
 addEventListener("keyup",keyUp,false);
 addEventListener("keydown",keyDown,false);
}
setEvents()
function yieldEvents(time){
  removeEventListener("keyup",keyUp,false);
  removeEventListener("keydown",keyDown,false);
  setTimeout(setEvents,time);
}
yieldEvents(2000);//e.g.
0
Jonas Wilms 26 czerwiec 2017, 17:17

Jeśli używasz jQuery, możesz napisać taki kod:

$("your_elem").on("keyup",function(){
     $(this).off("keyup")
});

W przeciwnym razie, jeśli chcesz go przywrócić, możesz zastąpić Off przez na .

0
Bilel Kabtni 26 czerwiec 2017, 17:01

Spróbuj ustawić flagę

// Handle keyboard controls
var keysDown = {},
  ignore = false,tId;

addEventListener("keydown", function(e) {
  if (ignore) return false;
  keysDown[e.keyCode] = true;
}, false);

addEventListener("keyup", function(e) {
  if (ignore) return false;
  delete keysDown[e.keyCode];
}, false);


function doStuff() {
  ignore = true;
  tId = setTimeout(function() { ignore=false; continueExecution() }, 2000) //wait two seconds before continuing

}
0
mplungjan 26 czerwiec 2017, 17:00