简体   繁体   中英

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(function() {
  $("body").animate({ scrollTop: 0 }, "slow");
  return false;
});

But it only scrolls to the top, I also tried the jQuery-plugin ScrollTo , but I just can't get it to work, I also tried the jQuery plugin:

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

But also without succes.

Does anyone know a good, easy to understand, sample I can use? Thanks in advance!

untested

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

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 :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM