Я хочу, чтобы 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 один раз.

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


person totoaussi    schedule 26.08.2015    source источник
comment
все ок, какой браузер используете?   -  person trquoccuong    schedule 26.08.2015
comment
потенциальный дубликат stackoverflow.com/questions/4961072/jquery-continuous-mousedown   -  person TuanDT    schedule 26.08.2015


Ответы (1)


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

Однако 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.

person DrunkWolf    schedule 26.08.2015
comment
Вау, большое спасибо! Вы решили мою проблему, потому что это то, что я хотел. Еще раз спасибо. - person totoaussi; 26.08.2015