2012-04-21 1 views
7

내 음악 플레이어에서 타임 라인으로 사용되는 슬라이더가 있습니다. 최소값은 0이고 최대 값은 노래 길이 (초)입니다. 매초마다 (나는 타이머로 이것을한다), 슬라이더가 움직이고 값은 현재 시간으로 설정된다. 이 코드 라인은 그 다음과 같습니다jQuery 슬라이더 "change"이벤트 : 누가 호출했는지 어떻게 결정합니까?

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

사용자는/슬라이드 슬라이더를 클릭하고 노래에서 다른 지점으로 이동 할 수 있습니다,이 함수 '플레이 (startPlayFromHere를)'발사하는 것입니다. 그것은 그 다음과 같습니다

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

문제는 타이머와 사용자의 코드 라인 모두 슬라이더 같은 '변화'이벤트를 호출, 사용자가 슬라이더를 이동 할 수 없다는 것입니다.

내 질문은 사용자가 변경 이벤트를 호출했는지 여부를 어떻게 확인할 수 있습니까 (즉, 타이머 였음을 의미)?

충분히 명확하겠습니다. 감사합니다.

답변

21

변경 핸들러에서 event.originalEvent을 테스트하여 수동으로 또는 프로그래밍 방식으로 변경 이벤트가 발생했는지 여부를 판별 할 수 있습니다.

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

fiddle을 참조하십시오.

+0

감사! 이제 다른 문제가 발생했습니다. 사용자가 슬라이드하려고하면 타이머가 여전히 작동하고 슬라이더가 슬라이드됩니다. 그래서 때로는 슬라이더가 원래 위치로 되돌아가 사용자의 호출을 무시합니다. – eviabs

+1

쓸 시간이 없지만 (start) 핸들러 ([documentation] (http://jqueryui.com/demos/slider/) 참조)를 사용하여 금지 할 플래그를 발생시킬 수 있습니다 (타이머 코드의 해당 조정으로) 슬라이더의 타이머 제어. 'change' 핸들러에서 플래그를 다시 낮 춥니 다. (또는 타이머를 중지 한 다음 다시 시작하십시오.) –

관련 문제