Dynamically change background color on scroll
You need to smoothly interpolate the colors by taking into account the page's scroll offset (window.scrollY
, or window.pageYOffset
on older browsers).
The Samsung site is transitioning a solid color instead of a gradient, which is a bit simpler.
Like this (see CodePen):
const [red, green, blue] = [69, 111, 225]
const section1 = document.querySelector('.section1')
window.addEventListener('scroll', () => {
let y = 1 + (window.scrollY || window.pageYOffset) / 150
y = y < 1 ? 1 : y // ensure y is always >= 1 (due to Safari's elastic scroll)
const [r, g, b] = [red/y, green/y, blue/y].map(Math.round)
section1.style.backgroundColor = `rgb(${r}, ${g}, ${b})`
})
You can apply the same logic to the gradient colors.
I think you need to use the "transition" property of CSS.
body {
background: green;
transition: 0.3s all;
}
Then you can add, remove elements along with change color:
$(function() {
$(window).scroll(function () {
if ($(this).scrollTop() > 50) {
$(‘body’).addClass(‘colorChange’)
$(‘header’).addClass(‘displayNone’)
$(‘nav’).removeClass(‘navBackgroundStart’)
$(‘nav ul’).addClass(‘addBlackBackground’)
}
if ($(this).scrollTop() < 50) {
$(‘body’).removeClass(‘colorChange’)
$(‘header’).removeClass(‘displayNone’)
$(‘nav’).addClass(‘navBackgroundStart’)
$(‘nav ul’).removeClass(‘addBlackBackground’)
}
});
});