Как я могу использовать onkeydown вне элемента ввода? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть очки на холсте JS. Я нажимаю на них, чтобы инициировать различные функции. Я уже использую правый и левый щелчки, но я хотел бы сделать что-то другое, если я нажимаю SHIFT, когда нажимаю левую кнопку.

Мне нужно определить onkeydown, но курсор отсутствует в элементе ввода. Как я могу это сделать?

например:

function getPosition3(event) // to get click position in canvas3
{   var canvas = document.getElementById("canvas3");
    mousePos = getMousePos(canvas, event); 
    ge3.px = mousePos.x;
    ge3.py = mousePos.y;
    p2g(ge3);       // converts pixels to graphic coordinates ge3.gx & ge3.gy
    closestDist = 5000000;
    chn = -1; // will contain index of the closest hedge to the click
    [nearestX, nearestY, chn] = nearestHedge(ge3.gx, ge3.gy);
    rnddot(ge3, nearestX, nearestY, 4, '#000000', 0);

    if (event.which==3) {popit(chn);} //popup graph on right click 
    else {poptxt(chn);} 
// Here I'd like to detect onkeydown to allow another option

}   

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

Присоедините события keydown и keyup к window с помощью window.addEventListener("keydown/keyup", ...) и сохраните глобальную переменную, которая отслеживает состояние нажатой клавиши Shift.

Затем внутри функции getPosition3 просто проверьте эту переменную.

var shiftPressed = false;
window.addEventListener("keydown", function(ev) {
    shiftPressed = ev.shiftKey; // or whatever property. Just written on-the-fly and I'm not sure if is shiftKey.
});
window.addEventListener("keyup", function(ev) {
    shiftPressed = ev.shiftKey;
});

function getPosition3(event) {
    // [...]
    // blah blah
    // [...]
    if (shiftPressed) {
        // Things
    }
}
1 голос
/ 07 мая 2019

с ванильным JavaScript:

var shiftPressed = false;

document.addEventListener ('keydown', function(event) {
  shiftPressed = event.shiftKey;
});

document.addEventListener ('keyup', function(event) {
  shiftPressed = event.shiftKey;
});

Затем измените свою функцию:

if (shiftPressed) {popit(chn);}

JS Fiddle: https://jsfiddle.net/charlesartbr/6L4juxbk/

...