需要javascript代码按钮按住

时间:2008-09-17 03:55:37

标签: javascript mouse

我想要一个简短的最小javascript例程,当按钮发生mousedown时,它首先响应就像鼠标点击一样,然后如果用户按下按钮,它会响应,就像用户不断发送鼠标点击一样当按下按钮时,好像用户正在加速他们的鼠标点击...基本上把它想象成一个按键重复加速的时间。
即用户按住鼠标键(x =通话功能) - x ___ x ___ x ___ x__x__x_x_x_x_xxxxxxx

6 个答案:

答案 0 :(得分:16)

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 */

答案 1 :(得分:4)

按下按钮时,请按照预期时间和功能window.setTimeout拨打x,然后在x结束时再次设置计时器,但这次间隔较小。

释放鼠标按钮时使用window.clearTimeout清除超时。

答案 2 :(得分:1)

只需在OnMouseDown中放置以下toggleOn,然后在按钮的OnMouseUp中放置toggleOff。

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{

}

答案 3 :(得分:0)

@glenuular:感谢您采用这种有趣的方法! 它有一些小问题: -初始值未重置,因此在第二次使用时启动速度太快。 -起始值被无限制地划分,因此短时间后变得很小。 -参数没有传递给被调用的方法。 (现在限制为6个参数,通常足以通过“ 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;
    }
};

答案 4 :(得分:-1)

类似下面的伪代码可能有用..

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;" />

答案 5 :(得分:-1)

我只是发布了一个jQuery插件,请在此demo上查看repo

$('button').clickAndHold(function (e, n) {
    console.log("Call me baby ", n);
});