Bon j'avoue c'est un peu plus compliqué que ça !
le 'click' n'est pas adapté car si admettons on relache CTRL avant la souris il va y avoir un souci de reset de la variable qui est censé vérifier si la souris est enfoncée.
Et inversement ( j'avais fait quelques tests à une époque et c'est vrai que c'est galère ).
Le souci majeur de ce que tu demande:
_ lors d'un keydown, l'event est répété tant que la touche est pressée.
_ mais ce n'est pas vrai pour un mousedown
Bon alors je n'ai pas voulu entrer dans les preventDefault & stopPropagation et autres joyeusetés, ici c'est du simple, avec une petite tempo pour dévalider le mouseup !
D'ailleurs si quelqu'un à une solution plus élégante je suis preneur
document.addEventListener('keydown', checkKeyDown,false);
document.addEventListener('keyup', checkKeyUp);
document.addEventListener('mousedown', checkMouseDown);
document.addEventListener('mouseup', checkMouseUp);
let ctrlPressed = false;
let mouseClicked = false;
function checkKeyDown ( event ) {
if ( event.code == "ControlLeft" || event.code == "ControlRight") {
ctrlPressed = true;
} else { ctrlPressed = false; }
};
function checkKeyUp ( event ) {
if ( event.code == "ControlLeft" || event.code == "ControlRight") {
// on vérifie que y'a pas de click en cours
if ( ctrlPressed && !mouseClicked ) { alert("CTRL only pressed"); }
}
};
function checkMouseDown ( event ) { mouseClicked = true; };
// petit délai avant de dévalider mouseClicked
function checkMouseUp ( event ) { setTimeout(delayUp, 700); };
function delayUp() { mouseClicked = false; }