<body>
<div class="global-wrapper">
// content
</div>
</body>
.global-wrapper {
overflow: hidden;
}
function calcScale(min = .3, max = 20, endScroll = 3000) {
const scrollPart = window.scrollTop / endScroll;
return max -scrollPart * (max - min);
}
window.addEventListener('scroll', (e) => {
document.querySelector('.js-elem').style.transform = `scale(${calcScale()})`;
}, { passive: true, })
top: 50%;
left: 50%;
transform: translate(-50%, -50%) scale(K);
Сервер настройте - будет отдавать все эти заголовки по прямому пути к изображению... Это точно менее ресурсоёмко, чем эти велосипеды.