Событие 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 и использовать аргумент обратного вызова