Я пытаюсь создать пользовательский обратный вызов для функции jQuery .animate(). Я ограничиваюсь JQuery 1.4.2 и на основе моего пользовательский вызова в этой статье [Дэн Свитцер] [1]jQuery Пользовательский обратный вызов для .animate()
(function ($){
var oldAnimate = $.fn.animate;
$.fn.animate = function(){
this.trigger('animate.before', arguments);
var animateResult = oldAnimate.apply(this, arguments);
this.trigger('animate.after', arguments);
return animateResult;
};
})(jQuery || {});
$('#ID').bind('animate.after', function(){
//Do Something
});
Однако, когда я запускаю этот код, мое «// Выполняет что-то» не вызвать. Я также попытался следующие [статья Дэйва Уорда] [1], а также, с помощью этого:
var oldAnimate = jQuery.animate;
jQuery.animate = function() {
if (typeof animate.before === 'function')
animate.before.apply(this, arguments);
var animateResult = oldAnimate.apply(this, arguments);
if (typeof animate.after === 'function')
animate.after.apply(this, arguments);
return animateResult;
};
Я не знаю, где я буду неправильно.
Логически ваш код не имеет большого смысла. Ваше событие «после» произойдет до завершения анимации. Первый фрагмент ближе к правильному, второй фрагмент неправильный, потому что нет метода 'jQuery.animate'. –
Первым шагом должно быть упрощение кода. Вот первый шаг: http://jsfiddle.net/eayTB/ Здесь вы увидите, что .before и .after aprt теряются из-за того, что вы определяете пространство имен, и я серьезно сомневаюсь, что вы действительно хотелось, чтобы существовало пространство имен. –
@KevinB Я вижу ошибку, которую я сделал со вторым фрагментом, он должен быть «jQuery.fn.animate» вместо «jQuery.animate». Для пространства имен было бы лучше использовать 'onBeforeAnimate' и 'onAfterAnimate' вместо этого? –