Событие jQuery исчезает? - PullRequest
       6

Событие jQuery исчезает?

10 голосов
/ 05 декабря 2011

Можно ли получить какое-то уведомление о событии, когда элемент исчез с помощью 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 до завершения перехода.

Ответы [ 3 ]

12 голосов
/ 05 декабря 2011

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

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

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

$("#someAncestor").on("fadeInComplete", function() {
    //Element has finished fading in.
});
4 голосов
/ 05 декабря 2011

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

Может быть, вы можете использовать эффекты Jquery-UI и использовать аргумент обратного вызова

...