2012-04-21 48 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

相关问题