Я хочу, чтобы 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.