Нужен код JavaScript для нажатия и удержания кнопки - PullRequest
13 голосов
/ 17 сентября 2008

Мне бы хотелось короткую наименьшую возможную подпрограмму javascript, чтобы при нажатии mousedown сначала она реагировала так же, как щелчок мышью, а затем, если пользователь удерживал кнопку нажатой, она реагирует так, как если бы пользователь непрерывно отправлял щелчки мыши и после в то время как нажатие кнопки ведет себя так, как будто пользователь ускоряет свои щелчки мышью ... в основном, думайте об этом как о повторении нажатия клавиши с ускорением во времени.
то есть пользователь удерживает нажатой кнопку мыши (x = вызов функции) - x ___ x ___ x ___ x__x__x_x_x_x_xxxxxxx

Ответы [ 5 ]

16 голосов
/ 17 сентября 2008
function holdit(btn, action, start, speedup) {
    var t;

    var repeat = function () {
        action();
        t = setTimeout(repeat, start);
        start = start / speedup;
    }

    btn.mousedown = function() {
        repeat();
    }

    btn.mouseup = function () {
        clearTimeout(t);
    }
};

/* to use */
holdit(btn, function () { }, 1000, 2); /* x..1000ms..x..500ms..x..250ms..x */
4 голосов
/ 17 сентября 2008

Когда кнопка нажата, вызовите window.setTimeout с указанным временем и функцией x и снова установите таймер в конце x, но на этот раз с меньшим интервалом.

Сбросьте время ожидания с помощью window.clearTimeout после отпускания кнопки мыши.

1 голос
/ 17 сентября 2008

Просто поместите следующий toggleOn в OnMouseDown и toggleOff в OnMouseUp кнопки.

var tid = 0;
var speed = 100;

function toggleOn(){
    if(tid==0){
        tid=setInterval('ThingToDo()',speed);
    }
}
function toggleOff(){
    if(tid!=0){
        clearInterval(tid);
        tid=0;
    }
}
function ThingToDo{

}
0 голосов
/ 14 апреля 2017

Я только что выпустил плагин jQuery, проверьте это демо на этом репо .

$('button').clickAndHold(function (e, n) {
    console.log("Call me baby ", n);
});
0 голосов
/ 17 сентября 2008

что-то вроде приведенного ниже кода псевдо может работать ..

var isClicked = false;
var clickCounter = 100;
function fnTrackClick(){
   if(isClicked){
      clickCounter--;
      setTimeout(clickCounter * 100, fnTrackClick);
   }
}

<input type="button" value="blah" onmousedown="isClicked=true;" onmouseover="fnTrackClick();" onmouseup="isClicked = false;" />
...