admin管理员组

文章数量:1310325

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!

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!

Share Improve this question edited Apr 24, 2016 at 17:42 MattAllegro 7,4055 gold badges49 silver badges57 bronze badges asked Feb 23, 2011 at 11:02 Jay WitJay Wit 3,0577 gold badges34 silver badges34 bronze badges 1
  • You need to tell us what isn't "working". You got error messages? What debugging did you try? – Lightness Races in Orbit Commented Feb 23, 2011 at 11:14
Add a ment  | 

2 Answers 2

Reset to default 4

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

本文标签: Smooth JavaScriptjQuery scroll to elementStack Overflow