2011-12-05 76 views
10

當元素使用jQuery淡化時,是否可以獲取某種事件通知?即如果有一個「fadeInEvent」我會嘗試像jQuery fadeIn事件?

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

我知道,有對jQuery.fadeIn()一個回調函數,例如

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

但我寧願使用事件解決方案,如果可能的話。我也做了一些使用:visible的原型,但在淡入完成之前它會返回true

回答

12

您可以trigger回調自定義事件:

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

該事件將冒泡DOM樹最喜歡的活動,這樣你就可以on(jQuery的1.7+)捕捉到它的任何祖先元素, binddelegate

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

謝謝,這解決了我的問題。我現在使用'bind',因爲該項目目前正在使用jQuery 1.6.4。 – matsev

4

你可以確保你傳遞到淡入方法每次回調你提出相應的事件,或者你可以猴子修補exising jQuery的淡入方法總是提出一個fadeInEvent回調,如:

(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,爲什麼呢? –