Нуждаюсь в коде JavaScript для нажатия кнопки и держу

Это законный, но бесполезный шаблон. Все расширяет Object, поэтому спецификация языка позволяет вам оставить его, и его вообще следует оставить без внимания (некоторые авторы стандартов кодирования не согласны).

Ситуация такая же в generics (extends Object неявно и избыточно), это просто по какой-то причине (я видел, как некоторые ранние ошибки с ошибками в Generics имели проблемы с подстановочным знаком?), он обнаружил там немного больше.

13
задан Jason Bunting 17 September 2008 в 03:56
поделиться

5 ответов

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 */
18
ответ дан 1 December 2019 в 22:41
поделиться

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

Очистите использование тайм-аута window.clearTimeout после выпуска кнопки мыши.

4
ответ дан 1 December 2019 в 22:41
поделиться

что-то как код psuedo ниже могло бы работать..

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;" />
-1
ответ дан 1 December 2019 в 22:41
поделиться

@glenuular: Спасибо за этот интересный подход! Были некоторые небольшие проблемы с ним: - величина запуска не была перезагружена, таким образом, на втором использовании она запустилась слишком быстро. - Величина запуска была разделена без предела, таким образом, это стало очень маленьким после короткого времени. - Аргументы не были переданы к названному методу. (Теперь ограниченный 6 args, обычно достаточными для прохождения 'ev').

    function holdit( btn, method, start, speedup ) {
    var t, keep = start;
    var repeat = function () {
        var args = Array.prototype.slice.call( arguments );
        method.apply( this, args );
        t = setTimeout( repeat, start, args[0], args[1], args[2], args[3], args[4], args[5] );
        if ( start > keep / 20 ) start = start / speedup;
    }
    btn.onmousedown = btn.mousedown = repeat;
    //
    btn.onmouseout = btn.mouseout = btn.onmouseup = btn.mouseup = function () {
        clearTimeout( t );
        start = keep;
    }
};
0
ответ дан 1 December 2019 в 22:41
поделиться

Просто поместите ниже 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{

}
1
ответ дан 1 December 2019 в 22:41
поделиться
Другие вопросы по тегам:

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