У меня есть простая .click()
с некоторыми функциями в ней:
$mario.on('click', this, function() {
var width_mario = $window.width()/2;
$contentw.animate({left: '100%', marginLeft: -width_mario, marginTop: 0}, 600);
$fixed.css({'background-color': '#510000', 'left': '25%'});
createMario();
trigger(); // fire trigger not until createMario() is finished with animation
});
внутри функции createMario()
загружаются ионы jQuery .animate()
. То, что я намереваюсь сделать, - запустить триггер, пока анимация createMario()
будет завершена. Что-то вроде функции возврата, которую вы можете сделать, если анимация закончена, но внутри функции щелчка.
благодаря
edit: а не с setTimeout()
потому что анимация имеет случайную скорость.
передайте его как обратный вызов, что-то вроде этого:
function createMario(calback_fn) {
...
animate({...}, {duration: 12345, complete: callback_fn});
...
}
Убедитесь, что вы добавили его к самому длинному animate
звонку. Обратите внимание, что, возможно, потребуется немного изменить синтаксис анимации, см. Http://api.jquery.com/animate/ для разных параметров аргумента).
Затем выполните:
...
$fixed.css({'background-color': ... as before... });
createMario(trigger);
Вы не можете это сделать буквально. Вместо этого вам нужно передать ссылку на функцию trigger
в createMario
и вызвать ее, когда анимация будет завершена. Предполагая, что анимация осуществляется через jQuery, у них есть обратный вызов, который они вызывают, когда они будут сделаны.
createMario
в другой точке, где я не хочу, чтобы вызвать trigger()
. У меня было это раньше!
null
или undefined
(по умолчанию, если вы ничего не передаете) или jQuery.noop
в createMario
и обработайте его. Например (внутри createMario
) if (callback) { callback(); }
Вы также можете использовать element.promise.done(function() { trigger(); });
если вы createMario
1 элемент в функции createMario
или можете присоединить его к самому длинному анимированному элементу (тот, который занимает дольше всего), и он trigger()
функцию trigger()
после того, как этот элемент завершит анимацию.
Вот пример jsFiddle, который иллюстрирует это: http://jsfiddle.net/WPHmY/2/
promise()
. Отсрочки просто потрясающие!