2012-04-21 16 views
7

Mam suwak, który jest używany jako linia czasu w moim odtwarzaczu muzycznym. Minimalna wartość to 0, a maksymalna wartość to długość utworu (w sekundach). Co sekundę (robię to z timerem), suwak przesuwa się, a wartość jest ustawiona na bieżący czas. Ta linia kodu wygląda tak:Zdarzenie "zmiana" suwaka jQuery: Jak ustalić, kto to nazwał?

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

Użytkownik jest w stanie przesunąć/kliknij suwak i przejść do innego punktu w piosence, to jest przez wypalanie „grania (startPlayFromHere)” funkcja. Wygląda na to, że:

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

Problem polega na tym, że zarówno linia kodu w zegarze a użytkownikiem wzywają ten sam „change” wydarzenie suwaka, a użytkownik nie może przesunąć suwak.

Moje pytanie brzmi: jak ustalić, czy użytkownik wywołał zdarzenie zmiany, czy nie (co oznacza, że ​​był to zegar)?

Mam nadzieję, że jest wystarczająco jasne, Dzięki!

Odpowiedz

21

Można ustalić, czy zdarzenie zmiany wystąpiło ręcznie lub programowo, testując kod event.originalEvent w procedurze zmiany.

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

Zobacz fiddle.

+0

Dzięki! Teraz mam inny problem: gdy użytkownik próbuje przesunąć, zegar nadal działa i przesuwa suwak. Czasami suwak powraca do pierwotnej pozycji i ignoruje rozmowę użytkownika. – eviabs

+1

Nie ma czasu na zapisanie, ale można dołączyć obsługę "start" (patrz [dokumentacja] (http://jqueryui.com/demos/slider/)), aby podnieść flagę, która będzie blokować (z odpowiednią regulacją kodu timera) sterowanie timera suwakiem. Ponownie opuść flagę w procedurze 'change'. (Alternatywnie, zatrzymaj stoper, a następnie uruchom go ponownie). –

Powiązane problemy