Задать вопрос
Dark_Knight
@Dark_Knight
Game Dev

Как улучшить/сгладить анимацию backgroundPosition в JavaScript?

Здравствуйте, подскажите пожалуйста.
Есть анимация EaseOut, которая прокручивает бэкграунд на определенное расстояние.
Если расстояние не большое, то эффект срабатывает отлично, но если я задаю прокрутку анимации примерно на >= 300px, то анимация получается, какая-то «рваная»… И еще вопрос, когда расстояние не большое то эффект выполняется медленно, но если >=300px то анимация старается пройти за это же время расстояние, но естественно с большей скоростью.
Помогите пожалуйста сделать так, чтоб вне зависимости от расстояния, скорость анимации была неизменна.
Вот код:
function set_animate(opts) {
        var start = new Date,
            timer = setInterval(function () {
                var progress = (new Date - start) / opts.duration;

                if (progress > 1) {
                    progress = 1;
                }

                opts.step(opts.delta(progress));

                if (progress == 1) {
                    clearInterval(timer);
                }
            }, 34);
    }

    function get_animate(elem, delta, duration) {
        var to = 58;

        set_animate({
            delay: 10,
            duration: duration || 1000,
            delta: delta,
            step: function (delta) {
                $(elem).css('backgroundPosition', '0 -' + to * delta + 'px');
            }
        });
    }

    function bounce(progress) {
        for (var a = 0, b = 1, result; 1; a += b, b /= 2) {
            if (progress >= (7 - 4 * a) / 11) {
                return -Math.pow((11 - 6 * a - 11 * progress) / 4, 2) + Math.pow(b, 2);
            }
        }
    }

    function makeEaseOut(delta) {
        return function (progress) {
            return 1 - delta(1 - progress);
        }
    }

    get_animate(slide.number_1, makeEaseOut(bounce));


Спасибо огромное за вашу помощь и потраченное время.
  • Вопрос задан
  • 3972 просмотра
Подписаться 8 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 2
gigigi
@gigigi
Попробуйте воспользоваться css transition, оно должно работать плавнее.
Вот тут есть пример jsfiddle.net/hfXSs/
Ответ написан
используйте requestAnimationFrame вместо setInterval
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Rocket Смоленск
от 80 000 до 130 000 ₽
div. Ставрополь
от 40 000 до 90 000 ₽
Wanted. Санкт-Петербург
До 220 000 ₽
18 дек. 2024, в 11:57
500 руб./в час
18 дек. 2024, в 11:54
2000 руб./за проект