Skip to content Skip to sidebar Skip to footer

Smooth JavaScript/jQuery Scroll To Element

I'm trying to make a horizontal scroll website, but I don't know how to smoothly scroll from one element to the other. I tried the following code: $('a[href='#top']').click(functio

Solution 1:

untested

   $('.click').click(function(){
        $.scrollTo( $('.last'), 800);
    });

Solution 2:

In case you have to / need to avoid using jQuery here is vanilla JS solution which worked for us nicely:

function scrollToElement(myElement, scrollDuration = 500) {
    const elementExists = document.querySelector(myElement);
    if (elementExists && elementExists.getBoundingClientRect) {
        const rect = elementExists.getBoundingClientRect();
        const elementTop = rect.top + window.scrollY - 200; // a bit of space from top
        var cosParameter = (window.scrollY - elementTop) / 2,
            scrollCount = 0,
            oldTimestamp = performance.now();
        function step(newTimestamp) {
            console.log(scrollCount);
            scrollCount += Math.PI / (scrollDuration / (newTimestamp - oldTimestamp));
            if (scrollCount >= Math.PI) {
                window.scrollTo(0, elementTop);
                return;
            }
            window.scrollTo(0, Math.round(cosParameter + cosParameter * Math.cos(scrollCount)) + elementTop);
            oldTimestamp = newTimestamp;
            window.requestAnimationFrame(step);
        }
        window.requestAnimationFrame(step);
    }
}
scrollToElement("#yourElement");

I hope it helps :)


Post a Comment for "Smooth JavaScript/jQuery Scroll To Element"