Я пытаюсь добиться эффекта «скроллинга» с прокруткой с использованием Javascript и CSS. Я придумал следующий код, который клонирует содержимое и применяет clip
, чтобы он выглядел так, будто он прокручивается при добавлении случайного горизонтального смещения.Эффект скроллинга CSS/JS (производительность)
function scanglitch() {
var e = $('#wrapper').clone().appendTo('#glitchcontainer');
var i = 0;
e.css({"clip": "rect(" + i + "px,3830px," + (i + 15) + "px,0px)"});
e.css("z-index",200);
var interval = setInterval(function() {
e.css({"clip": "rect(" + i + "px,3830px," + (i + 15) + "px,0px)"});
e.css({"left": Math.round(Math.random() * 10) + "px"});
i+=4;
if (i > window.innerHeight) {
e.remove();
window.clearInterval(interval);
}
}, 40);
}
Fiddle (Нажмите на текст, чтобы увидеть эффект)
Я на самом деле очень доволен эффектом, но реализация явно хак. В результате производительность неприемлемо низкая (при использовании эффекта хром cpu от 5% до 50%).
Может ли кто-нибудь помочь мне выяснить способ достижения этого эффекта в более элегантном и менее производительном режиме?
UPDATE: Я внедрил ваши предложения: используя перевод вместо левого, прокрутку с помощью перевода вместо js-цикла, вычисление вне тега css и использование requestAnimationFrame()
. Теперь код более приятный и более предсказуемый, но анимации по-прежнему очень облагаются налогом. New fiddle
Производительность может быть улучшена путем вычисления чего-либо внутри метода '.css()' и использования 'translate' вместо' left'. Кстати, свойство 'clip' устарело. – Shikkediel