2008-09-17 70 views
11

我想要一個儘可能短的JavaScript例程,當一個按鈕上發生mousedown它首先響應就像一個鼠標點擊,然後如果用戶保持按鈕按下它響應,就好像用戶不斷地發送鼠標點擊,過了一段時間,按下按鈕就好像用戶正在加速他們的鼠標點擊一樣......基本上認爲它就像按鍵加速時間一樣重複。
即用戶按住鼠標按鈕(X =呼叫功能) - x___x___x___x__x__x_x_x_x_xxxxxxx需要JavaScript代碼的按鈕按住按鈕

回答

13
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 */ 
+0

謝謝。我爲指數曲線而不是線性添加了一個對數函數,但那幾乎就是我正在尋找的。 – zurk 2008-09-17 04:30:27

3

當按下按鈕時,調用window.setTimeout與您的預期時間和功能x,並在x結束,但此時再次設置定時器間隔較小。

在釋放鼠標按鈕時使用window.clearTimeout清除超時。

+0

我忙着爲他編寫代碼,但決定不在,並且在這段時間你發佈了這個,這正是我正在研究的。非常好。 – 2008-09-17 04:04:25

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

只要把下面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

這是一個簡單的解決方案,但它使用全局變量。我還更喜歡其他解決方案,每個迭代都會調用下一個解決方案,這兩個解決方案都是爲了更安全的邏輯,因爲每次調用都可以改變間隔長度(加速度)。 – 2016-04-28 19:35:43

-1

我只是釋放一個jQuery插件,請在此demo這個repo

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