khlopchyna
@khlopchyna

Как можно оптимизировать анимацию (parallax on mouseMove)?

Здравствуйте.

https://codepen.io/khlopchyna/pen/JpENmj?editors=1111

Как можно оптимизировать выполнение даной анимации?
Если открыть консоль, поймете о чем я говорю.

Что сделал я? - округлил число над которым выполняються просчеты.
Сделал EventListener только на блоке с Background.

Но когда я отвожу мышку вне этого контейнера, он все равно считает. Даже если вы подождете, он всеравно считает значение, просто оно одно и тоже и визуально сложно уловить, но можно посмотреть в консоле.
И еще - когда происходит сдвиг, например с 19 на 20, перед окончанием анимации, скрипт очень долго считает именно последний, который почти не видно пискль и его *.ххх от числа.
  • Вопрос задан
  • 508 просмотров
Пригласить эксперта
Ответы на вопрос 1
amf1k
@amf1k
var lFollowX = 0,
lFollowY = 0,
x = 0,
y = 0,
friction = 1 / 30;

function moveBackground() {
x += (lFollowX - x) * friction;
y += (lFollowY - y) * friction;

translate = 'translate(' + x.toFixed(0) + 'px, ' + y.toFixed(0) + 'px) scale(1.1)';

console.log(translate)

$('.bg').css({
'-webit-transform': translate,
'-moz-transform': translate,
'transform': translate
});

window.requestAnimationFrame(moveBackground);
}

$('.wrap').on('mousemove click', function(e) {

var lMouseX = Math.max(-100, Math.min(100, $(window).width() / 2 - e.clientX)).toFixed(0);
var lMouseY = Math.max(-100, Math.min(100, $(window).height() / 2 - e.clientY)).toFixed(0);
lFollowX = (20 * lMouseX) / 100; // 100 : 12 = lMouxeX : lFollow
lFollowY = (10 * lMouseY) / 100;

});

moveBackground();


Можно сделать проверку на предыдущее значение и не считать дальше. Можно реализовать событие mousedown и удалять анимацию cancelAnimationFrame.
Вне контейнера не считается, все нормально.
Ответ написан
Ваш ответ на вопрос

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

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