Задать вопрос
manavar_g
@manavar_g
Чайник ;)

Как переписать данный скрипт?

Всем привет! Есть проблема, есть скрипт:
var down = false; 
var olddown = window.onkeydown, oldup = window.onkeyup 
var key_w = {keyCode: 87}; 
setInterval(function() { 
if(down) 
{olddown(key_w) 
oldup(key_w)}}, 50) 
onmousedown = function(e) { 
switch (e.which) { 
case 1: down = true; 
} 
} 
onmouseup = function(e) { 
switch (e.which) { 
case 1: down = false; 
} 
}


Данный скрипт, при зажатии ЛКМ повторяет нажатие W(ц) на клавиатуре, если отпустить - нет. Собственно надо как-то сделать чтобы тоже самое было на правую кнопку мышки и имитация была пробела.
  • Вопрос задан
  • 1245 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Если я правильно понял задачу, чтобы основная кнопка мыши имитировала нажатие W, а вторая кнопка мыши - пробел с автоповтором:
const buttonChars = {
  1: 'W',  // левая (основная) кнопка мыши
  2: ' ',  // правая (второстепенная) кнопка
};
/* коды кнопок см. в https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons
    0 : No button or un-initialized
    1 : Primary button (usually the left button)
    2 : Secondary button (usually the right button)
    4 : Auxilary button (usually the mouse wheel button or middle button)
    8 : 4th button (typically the "Browser Back" button)
    16 : 5th button (typically the "Browser Forward" button)
 Могут быть нажаты одновременно несколько кнопок мыши - их коды суммируются.
*/

let timer;
const clearTimer = () => {if (timer) clearInterval(timer);}
const root = window;

root.addEventListener("mousedown", e => {
  if (buttonChars.hasOwnProperty(e.buttons)) {
    const func = () => e.target.dispatchEvent(
      new KeyboardEvent('keydown',{
        'key': buttonChars[e.buttons],
        'bubbles': true,
        'cancellable': true,
      })
    );
    
    func();
    clearTimer();
    timer = setInterval(func, 80);
  };
});

root.addEventListener("mouseup", clearTimer);


Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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