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