2011-12-05 20 views
10

¿Es posible obtener algún tipo de notificación de eventos cuando un elemento se ha desvanecido usando jQuery? Es decir. si había un 'fadeInEvent' me gustaría probar algo así comojQuery fadeIn event?

$('elements').delegate('selector', 'fadeInEvent', function() { 
    alert('someId has faded in'); 
}); 

Sé que hay una llamada de retorno para jQuery.fadeIn(), por ejemplo,

$('#someId').fadeIn('fast', function() { 
    alert('callback when someId has faded in'); 
}); 

pero prefiero usar una solución de evento si es posible. También hice algunos prototipos utilizando :visible, pero devuelve true antes de que se haya completado el fundido.

Respuesta

12

puede trigger un evento personalizado en la devolución de llamada:

$("#someId").fadeIn("fast", function() { 
    $(this).trigger("fadeInComplete"); 
}); 

el evento estará circulando por el árbol DOM como la mayoría de los eventos, por lo que puede capturarlo en cualquiera de los elementos antecesores con on (jQuery 1.7+), bind o delegate:

$("#someAncestor").on("fadeInComplete", function() { 
    //Element has finished fading in. 
}); 
+0

Gracias, esto resuelve mi problema. Yo uso 'bind' por el momento, porque el proyecto actualmente usa jQuery 1.6.4. – matsev

4

Se podría asegurar que en cada devolución de llamada se pasa al método fadeIn se eleva el evento apropiado, o usted podría mono parchear el método jQuery fadeIn exising para elevar siempre una fadeInEvent en la devolución de llamada, por ejemplo:

(function($) { 
    var jQueryFadeIn = $.fn.fadeIn; 
    var newFadeIn = function(speed, callback) { 
    var newCallback = function() { 
     if (callback) { 
      callback.apply(this, arguments); 
     } 
     $(this).trigger('fadeInComplete'); 
    }; 
    jQueryFadeIn(speed, newCallback); 
    }; 
    $.fn.fadeIn = newFadeIn; 
})(window.jQuery); 
+0

@Downvoters, ¿por qué? –