2013-04-21 2 views
4

я установка простого метод аниматор так:Pass Jquery к .animate Обратного вызова

Animator: function (obj, aniArgs, duration, aniEasArgs, completeFunction) { 
    obj.stop(true, true).animate(aniArgs, { 
     duration: duration, 
     queue: false, 
     specialEasing: aniEasArgs, 
     complete: function() { 
      if (completeFunction !== null) { 

      }; 
     } 
    }); 
    return obj; 
}, 

То, что я хотел бы сделать, это быть в состоянии передать в строке JQuery для запуска в полном обратном вызове. Все остальное отлично работает. Как, например, я бы перешел в

$('#someElement').hide(500); 

в обратный вызов?

Спасибо!

+0

Просто позвоните 'completeFunction()'? – Menztrual

+0

Я буду использовать эту функцию для вызова различных анимаций для разных элементов. Итак, Plugin.Animator (элемент, {'opacity': 0.5}, 500, {'opacity': 'linear'}, "....") ... где находится информация обратного вызова (например, $ ('# someElement '). hide (500) нужно было бы пойти. Я не уверен, что я следую за вами, вызвав функцию completeFunction()? – Aaron

+0

как «Аниматор» называется –

ответ

4

Во-первых, создать функцию с кодом, который вы хотите запустить:

function complete() { 
    $('#someElement').hide(500); 
} 

Затем передать эту функцию в том, когда вы звоните Аниматор:

Animator(obj, aniArgs, duration, aniEasArgs, complete); 

Или, вы можете поместить функцию инлайн :

Эти обои работают одинаково, вы можете использовать любой стиль в зависимости от того, что делает ваш код легче читать.

В любом случае, изменить код аниматор:

 if(completeFunction) { 
      completeFunction(); 
     }; 

Или, вы часто будете видеть, что так написано:

 completeFunction && completeFunction(); 

Они оба делают то же самое. Это просто вопрос вкуса, который вы используете, просто подумал, что я упомянул оба варианта, чтобы вы узнали их, когда увидите их.

Обратите внимание, что тест !== null здесь не требуется, и на самом деле это не то, что вы хотите. Это потому, что если вызывающий абонент не переходит в completeFunction, значение этой переменной будет undefined, а не null, поэтому ваш тест не будет работать. Интересно, что в этом случае вы можете использовать != null, потому что это будет проверять как null, так и undefined и относиться к ним одинаково. Но на самом деле вам просто не нужен этот явный тест вообще, если единственное, что вы проверяете, - это то, что вызывающий абонент предоставил обратный вызов completeFunction или нет.

+0

Отлично! Большое спасибо, и он отлично поддерживает читаемость :) – Aaron

+0

Отлично! Рад помочь. Кроме того, я просто добавил еще пару важных примечаний к ответу. –

+0

Ницца, еще раз спасибо! – Aaron

0

Попробуйте

Animator: function (obj, aniArgs, duration, aniEasArgs, completeFunction) { 
    obj.stop(true, true).animate(aniArgs, { 
     duration: duration, 
     queue: false, 
     specialEasing: aniEasArgs, 
     complete: function() { 
      if (jQuery.isFunction(completeFunction)) { 
       completeFunction.apply(this, arguments); 
      }; 
     } 
    }); 
    return obj; 
}, 

Theb

x.Animator(obj, aniArgs, duration, aniEasArgs, function(){ 
    $('#someElement').hide(500); 
}) 
Смежные вопросы