2011-12-05 11 views
10

E 'possibile ottenere qualche tipo di notifica di evento quando un elemento si è sbiadito usando jQuery? Cioè se ci fosse un 'fadeInEvent' Vorrei provare qualcosa di similejQuery fadeIn evento?

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

So che c'è una funzione di callback per jQuery.fadeIn(), per esempio

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

ma preferirei utilizzare una soluzione evento se possibile. Ho anche fatto alcuni prototipi usando :visible, ma restituisce true prima che la dissolvenza in entrata sia stata completata.

risposta

12

è possibile trigger un evento personalizzato nel callback:

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

l'evento si bolla la struttura DOM come la maggior parte degli eventi, in modo da poter catturare su qualsiasi degli elementi antenati con on (jQuery 1.7+), bind o delegate:

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

Grazie, questo risolve il mio problema. Io uso 'bind' per ora, perché il progetto sta attualmente utilizzando jQuery 1.6.4. – matsev

4

Si potrebbe garantire che in ogni richiamata si passa al metodo fadeIn si alza l'evento appropriato, o si potrebbe scimmia patchare il metodo di jQuery fadeIn exising di alzare sempre un fadeInEvent nella richiamata, ad esempio:

(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, perché? –

Problemi correlati