Я хочу, чтобы onmousedown ведет себя как onkeydown, чтобы поддерживать функцию вызова.

Я создаю простую функцию, которая продолжает увеличивать глобальную переменную "i", когда вы удерживаете нажатой клавишу. Вот исходный код, очень простой:

<html>
<head>
</head>
<body>

<script type="text/javascript">

var i = 0;

document.body.onkeydown = function()
{
    i++;
 console.log(i);    
};

</script>   

</body>
</html>

Теперь я хочу получить тот же эффект, когда я заменяю onkeydown на onmousedown:

<html>
<head>
</head>
<body>

<script type="text/javascript">

var i = 0;

document.body.onmousedown = function()
{
    i++;

    console.log(i); 
};

</script>   

</body>
</html>

=> Но это не работает, потому что консоль один раз отображает значение i.

У тебя есть идея? Заранее спасибо.

1 ответ

Решение

Причина, по которой это не работает так, как вы думаете, заключается в том, что событие onkeydown довольно странно, потому что оно не "просто" при нажатии клавиши, но также и через определенные промежутки времени.

Onmousedown, однако, только на мышь вниз, поэтому для имитации того же поведения вы должны сделать что-то вроде

<script>
var i=0;
var dt=100;
var interval;
document.body.onmousedown = function(){
    interval = setInterval(function(){i++;console.log(i);},dt)
}
document.body.onmouseup = function(){
    clearInterval(interval);
}
</script>

где dt - время в мс между добавлением значения в i.

Другие вопросы по тегам