Pregunta

tengo una pagina que usa

$(id).show("highlight", {}, 2000);

para resaltar un elemento cuando inicio una solicitud ajax, eso podría fallar, por lo que quiero usar algo como

$(id).show("highlight", {color: "#FF0000"}, 2000);

en el manejador de errores.El problema es que si el primer resaltado no ha terminado, el segundo se coloca en una cola y no se ejecutará hasta que el primero esté listo.De ahí la pregunta:¿Puedo detener de alguna manera el primer efecto?

¿Fue útil?

Solución

De los documentos jQuery:

http://docs.jquery.com/Effects/stop

Detenga la animación que se está ejecutando actualmente en los elementos coincidentes....

Cuando .stop() se llama a un elemento, la animación que se está ejecutando actualmente (si la hay) se detiene inmediatamente.Si, por ejemplo, un elemento se oculta con .slideUp() cuando .stop() se llama, el elemento ahora seguirá mostrándose, pero tendrá una fracción de su altura anterior.Las funciones de devolución de llamada no se llaman.

Si se llama a más de un método de animación en el mismo elemento, las animaciones posteriores se colocan en la cola de efectos del elemento.Estas animaciones no comenzarán hasta que se complete la primera.Cuando .stop() Se llama, la siguiente animación en la cola comienza inmediatamente.Si el clearQueue El parámetro se proporciona con un valor de true, el resto de las animaciones de la cola se eliminan y nunca se ejecutan.

Si el jumpToEnd Al argumento se le proporciona un valor verdadero, la animación actual se detiene, pero el elemento recibe inmediatamente sus valores objetivo para cada propiedad CSS.En nuestro arriba .slideUp() Por ejemplo, el elemento se ocultaría inmediatamente.La función de devolución de llamada se llama inmediatamente, si se proporciona...

Otros consejos

Enumeré esto como un comentario para la respuesta aceptada, pero pensé que sería una buena idea publicarlo como una respuesta independiente, ya que parece ayudar a algunas personas que tienen problemas con .stop()


Para su información, también estaba buscando esta respuesta (tratando de detener un efecto de pulsación), pero tuve una .stop() en mi código.

Después de revisar los documentos, necesitaba .stop(true, true)

.stop(verdadero,verdadero) congelará el efecto, de modo que si es invisible en ese momento, permanecerá invisible.Esto podría ser un problema si utiliza el efecto de pulsación.

$('#identifier').effect("pulsate", {times:5}, 1000);

Para solucionar esto agregué

$('#identifier').stop(true, true).effect("pulsate", { times: 1 }, 1);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top