2011-03-22 12 views
25

estoy usando jQuery 1.5.1 Esta es mi código:función de devolución de llamada animada (completa) ejecutada al inicio?

$('.cellcontent').animate({ 
    left: '-=190'}, { 
    easing: alert('start ani'), 
    duration: 5000, 
    complete: alert('end ani')}); 

consigo ambas alertas antes de que comience la animación !? Quiero que la función completa comience después de que la animación haya terminado. ¿Alguna idea?

+0

http://api.jquery.com/animate –

Respuesta

28

Necesita pasar una función para llamar. En cambio, estás llamando a la función.

complete: function() { alert('end ani'); } 
9

Debe completar una función para completar.

Prueba esto:

$('.cellcontent').animate({ 
    left: '-=190'}, { 
    easing: alert('start ani'), 
    duration: 5000, 
    complete: function() { alert('end ani') } 
}); 

Desde completa espera una función, se ejecuta el código se pasa a ella para obtener un objeto función que se puede llamar de nuevo a cuando haya terminado.

+0

'easing' sigue siendo malo. –

+0

Sí lo es, pero de la pregunta que el OP quería saber cuando comenzó la animación, y esto lo mostrará. –

+0

Funcionará, pero sigue siendo incorrecto. 'alert()' devuelve 'undefined' que se pasa a' easing', por eso funciona. Si desea saber cuándo comenzó, simplemente coloque la 'alerta' antes de la llamada' .animate() '. –

1

ellos declaran en una función primera, de lo contrario el método se llama al instante:

var onComplete = function() { 
    alert('end ani'); 
}; 

luego llamar a ellos sin el()

$('.cellcontent').animate({ 
    left: '-=190'}, { 
    easing: 'slow', 
    duration: 5000, 
    complete: onComplete //<-- function is passed as a variable, not called directly 
}); 

o envolverlos directamente en una función (menos legible y más lento cuando se llama a esto mucho):

$('.cellcontent').animate({ 
    left: '-=190'}, { 
    easing: 'slow', 
    duration: 5000, 
    complete: function() { 
     alert('end ani'); 
    } 
}); 
+0

'easing' sigue siendo incorrecto.Este código no funciona. –

+0

flexibilización es normalmente una cadena, en este caso, no tengo idea de cuáles son las intenciones de la OP son o cómo se llega a este código. –

+0

Ahora me da un error: d.easing [j || k] no es una función? – Overbeeke

22

Veo dos cosas mal con esto.

Uno, easing debería ser:

A string indicating which easing function to use for the transition

Y complete debería ser una función.

http://api.jquery.com/animate

alert('start ani'); 
$('.cellcontent').animate({ 
    left: '-=190' 
    }, 
    { 
    easing: 'swing', 
    duration: 5000, 
    complete: function(){ 
     alert('end ani'); 
    } 
}); 
-1
$('.cellcontent').animate({ 
    left: '-=190', 
    easing: 'slow', 
    duration: 5000, 
    function() { 
    alert('end ani'); 
    } 
}); 
0

No creo que necesita "completa"?

slideToggle(
 
\t \t \t \t \t "fast","swing", function(){ 
 
\t \t \t \t \t \t \t // your code here 
 
\t \t \t \t \t \t } 
 
\t \t \t \t);

3

La mejor solución es la siguiente.

$('.cellcontent').animate({ 
    left: '-=190'}, { 
    easing: alert('start ani') 
}, duration).promise().done(function() { 
    alert('end animation'); 
}); 
2

del jquery docs:

$("#clickme").click(function() { 
    $("#book").animate({ 
    opacity: 0.25, 
    left: "+=50", 
    height: "toggle" 
    }, 5000, function() { 
    // Animation complete. 
    }); 
}); 
+0

Esta es la solución más corto posible. – morning

Cuestiones relacionadas