2012-04-21 14 views
7

Tengo un control deslizante que se utiliza como una línea de tiempo en mi reproductor de música. El valor mínimo es 0 y el vlaue máximo es la duración de la canción (en segundos). Cada segundo (lo hago con un temporizador), el control deslizante se mueve y el valor se establece en la hora actual. Esta línea de código es el que:jQuery slider evento de "cambio": ¿cómo puedo determinar quién lo llamó?

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

El usuario es capaz de deslizarse/haga clic en el control deslizante y saltar a otro punto de la canción, esto es por el disparo de la 'juego (startPlayFromHere)' función. Se ve así:

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

El problema es que tanto la línea de código en el temporizador y el usuario está llamando el mismo evento 'cambio' del cursor, y el usuario no puede mover el cursor.

Así que mi pregunta es ¿cómo puedo determinar si el usuario llamó al evento de cambio o no (eso significa que fue el temporizador)?

Espero que sea lo suficientemente claro, Gracias!

Respuesta

21

Puede determinar si un evento de cambio se produjo manualmente o mediante programación probando event.originalEvent en el controlador de cambios.

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

Ver fiddle.

+0

Gracias! Ahora tengo otro problema: cuando el usuario intenta deslizarse, el temporizador aún funciona y desliza el control deslizante. A veces, el control deslizante vuelve a la posición original e ignora la llamada de los usuarios. – eviabs

+1

No hay tiempo para escribirlo pero puede adjuntar un controlador 'start' (vea [documentation] (http://jqueryui.com/demos/slider/)) para levantar una bandera que inhibirá (con el ajuste correspondiente del código del temporizador)) el control del temporizador del control deslizante. Vuelva a bajar la bandera en el controlador 'change'. (Alternativamente, detenga el temporizador, luego reinícielo). –

Cuestiones relacionadas