Событие jQuery fadeIn?

Возможно ли получить какое-либо событие, если элемент исчез в использовании jQuery? То есть если бы был "fadeInEvent", я бы попробовал что-то вроде

$('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 до завершения затухания.

Ответ 1

Вы можете trigger настраивать событие в обратном вызове:

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

Событие закроет дерево DOM подобно большинству событий, поэтому вы можете записать его на любом из элементов-предков с помощью on (jQuery 1.7+), bind или delegate:

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

Ответ 2

Вы можете убедиться, что в каждом обратном вызове вы переходите в метод fadeIn, вы поднимаете соответствующее событие, или вы можете обезвредить вытесняющий метод fadeIn 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);

Ответ 3

Возможно, вы можете использовать JQuery-UI effects и использовать аргумент обратного вызова