приостановить выполнение функции нарочно

0

У меня есть простая .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() потому что анимация имеет случайную скорость.

Теги:

3 ответа

1
Лучший ответ

передайте его как обратный вызов, что-то вроде этого:

function createMario(calback_fn) {
    ...
    animate({...}, {duration: 12345, complete: callback_fn});
    ...
}

Убедитесь, что вы добавили его к самому длинному animate звонку. Обратите внимание, что, возможно, потребуется немного изменить синтаксис анимации, см. Http://api.jquery.com/animate/ для разных параметров аргумента).

Затем выполните:

...
$fixed.css({'background-color': ... as before... });
createMario(trigger);
  • 0
    спасибо человек, именно то, что я хотел!
2

Вы не можете это сделать буквально. Вместо этого вам нужно передать ссылку на функцию trigger в createMario и вызвать ее, когда анимация будет завершена. Предполагая, что анимация осуществляется через jQuery, у них есть обратный вызов, который они вызывают, когда они будут сделаны.

  • 0
    проблема в том, что мне нужно createMario в другой точке, где я не хочу, чтобы вызвать trigger() . У меня было это раньше!
  • 0
    @supersize: в этой ситуации просто передайте значение null или undefined (по умолчанию, если вы ничего не передаете) или jQuery.noop в createMario и обработайте его. Например (внутри createMario ) if (callback) { callback(); }
Показать ещё 1 комментарий
1

Вы также можете использовать element.promise.done(function() { trigger(); }); если вы createMario 1 элемент в функции createMario или можете присоединить его к самому длинному анимированному элементу (тот, который занимает дольше всего), и он trigger() функцию trigger() после того, как этот элемент завершит анимацию.

Вот пример jsFiddle, который иллюстрирует это: http://jsfiddle.net/WPHmY/2/

  • 0
    +1 за promise() . Отсрочки просто потрясающие!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню