Задать вопрос
@denism300

Как запустить анимацию один раз?

Пытаюсь запустить анимацию когда блок попадает во вьюпорт.
Написал такой код:
jQuery(document).ready(function ($) {
    var warranty_block = $(document).find('#warranty');
    $(window).on('scroll.progressbar', function () {
        if ($(window).scrollTop() + $(window).height() >= warranty_block.offset().top) {
            animate_progress_bar(warranty_block);
        }
    });
});

function animate_progress_bar(warranty_block) {
    var progress_bar = warranty_block.find('.progress-bar'),
        bar_value = progress_bar.attr('aria-valuenow') + '%';
    progress_bar.animate({
        width: bar_value,
    }, {
        duration: 5000,
        complete: function () {
            jQuery(window).off('scroll.progressbar');
        }
    });
}

Проблема в том, что анимация работает бесконечно, несмотря на то, что после выполнения функции анимации должен сработать метод off.
Как исправить?
  • Вопрос задан
  • 92 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@denism300 Автор вопроса
Вот так работает. Нужно было вынести off из метода compete функции animate
jQuery(document).ready(function ($) {
    var warranty_block = $(document).find('#warranty');
    $(window).on('scroll.progressbar', function () {
        if ($(window).scrollTop() + $(window).height() >= warranty_block.offset().top) {
            animate_progress_bar(warranty_block);
        }
    });
});

function animate_progress_bar(warranty_block) {
    var progress_bar = warranty_block.find('.progress-bar'),
        bar_value = progress_bar.attr('aria-valuenow') + '%';
    progress_bar.animate({
        width: bar_value,
    }, 5000);
    jQuery(window).off('scroll.progressbar');
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Stalker_RED
@Stalker_RED
Сейчас вы неправильно себе представляете что делают методы on и off. Почитайте внимательно их описание в документации. Они навешивают и снимают обработчик события, а не запускают и останавливают что-то там.

Заодно присмотритесь к .one(), вероятно это решит задачу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы