2012-04-21 14 views
7

Ho un cursore che viene utilizzato come linea del tempo nel mio lettore musicale. Il valore minimo è 0 e il valore massimo è la lunghezza della canzone (in secondi). Ogni secondo (lo faccio con un timer), il cursore si sposta e il valore è impostato sull'ora corrente. Questa linea di codice è così:Evento "modifica" slider jQuery: come determinare chi ha chiamato?

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

L'utente è in grado di far scorrere/fare clic sul dispositivo di scorrimento e passare a un altro punto della canzone, questo è di sparare il 'gioco (startPlayFromHere)' la funzione. Sembra che:

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

Il problema è che sia la riga di codice nel timer e l'utente stanno chiamando lo stesso evento 'cambiamento' del cursore, e l'utente non può spostare il cursore.

Quindi la mia domanda è come è possibile determinare se l'utente ha chiamato l'evento di modifica o no (ciò significa che era il timer)?

Spero sia abbastanza chiaro, Grazie!

risposta

21

È possibile determinare se un evento di modifica è stato generato manualmente o programmaticamente eseguendo il test event.originalEvent nel gestore modifiche.

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

Vedi fiddle.

+0

Grazie! Ora ho un altro problema: quando l'utente tenta di scorrere, il timer funziona ancora e fa scorrere il cursore. Quindi a volte il cursore torna alla posizione originale e ignora la chiamata dell'utente. – eviabs

+1

Non c'è tempo per scriverlo ma puoi allegare un gestore 'start' (vedi [documentazione] (http://jqueryui.com/demos/slider/)) per alzare un flag che inibirà (con la corrispondente regolazione del codice del timer) il controllo del timer del cursore. Rialora il flag nel gestore 'change'. (In alternativa, interrompere il timer, quindi riavviarlo). –

Problemi correlati