2012-04-21 49 views
7

我有一個滑塊,在我的音樂播放器中用作時間線。最小值是0,最大值是歌曲長度(以秒爲單位)。每秒鐘(我用一個計時器做這個),滑塊移動並且數值被設置爲當前時間。這行代碼看起來像這樣:jQuery滑塊「更改」事件:我如何確定誰調用它?

$("#sliderTime").slider("option", "value", document.sound.controls.currentPosition); 

用戶能夠滑動/點擊滑塊,並跳轉到另一點的歌,這是射擊的功能「播放(startPlayFromHere)」。它看起來像:

$("#sliderTime").slider({ 
    ... 
    change: function (event, ui) { play(ui.value) }, 
}); 

的問題是,無論是在計時器和用戶的代碼行調用的滑塊一樣「變」事件,並且用戶不能移動滑塊。

所以我的問題是我如何確定用戶是否調用change事件(這意味着它是計時器)?

我希望它很清楚, 謝謝!

回答

21

您可以確定變化事件是否手動或編程出現由更改處理測試event.originalEvent

$('#slider').slider({ 
    change: function(event, ui) { 
     if (event.originalEvent) { 
      //manual change 
      play(ui.value); 
     } 
     else { 
      //programmatic change 
     } 
    } 
}); 

請參閱fiddle

+0

謝謝!現在我遇到了另一個問題:當用戶嘗試滑動時,計時器仍然工作並滑動滑塊。所以有時滑塊會回到原來的位置並忽略用戶的呼叫。 – eviabs 2012-04-21 11:57:52

+1

沒有時間來寫,但你可以附加一個'start'處理(見[文件](http://jqueryui.com/demos/slider/))提出一個標誌,該標誌將抑制(與定時器代碼的相應調整)定時器對滑塊的控制。重新降低'change'處理程序中的標誌。 (可替換地,停止定時器,然後重新啓動)。 – 2012-04-21 13:38:49

相關問題