2011-12-05 35 views
10

Có thể nhận được một số loại sự kiện notifciation khi một yếu tố đã bị mờ trong việc sử dụng jQuery? I E. nếu có một 'fadeInEvent' Tôi sẽ cố gắng một cái gì đó giống nhưjQuery fadeIn sự kiện?

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

Tôi biết rằng có một chức năng gọi lại cho jQuery.fadeIn(), ví dụ

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

nhưng tôi muốn sử dụng giải pháp sự kiện nếu có thể. Tôi cũng đã làm một số prototyping sử dụng :visible, nhưng nó trả về true trước khi phai trong đã hoàn thành.

Trả lời

12

bạn có thể trigger một sự kiện tùy chỉnh trong callback:

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

sự kiện này sẽ bong bóng lên cây DOM giống như hầu hết các sự kiện, để bạn có thể nắm bắt nó trên bất kỳ các yếu tố tổ tiên với on (jQuery 1.7+), bind hoặc delegate:

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

Cảm ơn, điều này giải quyết được vấn đề của tôi. Tôi sử dụng 'bind' cho bây giờ, bởi vì dự án hiện đang sử dụng jQuery 1.6.4. – matsev

4

Bạn có thể đảm bảo rằng trong mỗi callback bạn vượt qua vào phương pháp fadeIn bạn nâng cao sự kiện thích hợp, hoặc bạn có thể khỉ vá các exising phương pháp jQuery fadeIn để luôn luôn nâng cao một fadeInEvent trong gọi lại, ví dụ:

(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, tại sao? –