O'Reilly

Smooth Scrolling with MooTools Fx.SmoothScroll

By on  

I get quite a few support requests for my previous MooTools SmoothScroll article and the issue usually boils down to the fact that SmoothScroll has become Fx.SmoothScroll. Here's a simple usage of Fx.SmoothScroll.

The HTML

<a href="#contact">Contact Us</a> <!-- goes down to the contact area -->

<!-- more stuff here -->

<a name="contact" id="contact"></a>
<h2>Contact Us</h2>

<-- more stuff here -->

The only HTML requirement for Fx.SmoothScroll is that all named anchors be given an identical id attribute.

The MooTools JavaScript

new Fx.SmoothScroll({
	duration: 200
},window);

Fx.SmoothScroll accepts two arguments: the area to scroll (defaults to the window) and options for the class. The default options are usually sufficient. One recommendation I do have is to make the duration quick -- no one wants to wait for the animation to finish.

Happy scrolling!

Track.js Error Reporting

Recent Features

  • 5 Awesome New Mozilla Technologies You&#8217;ve Never Heard Of

    My trip to Mozilla Summit 2013 was incredible.  I've spent so much time focusing on my project that I had lost sight of all of the great work Mozillians were putting out.  MozSummit provided the perfect reminder of how brilliant my colleagues are and how much...

  • Chris Coyier&#8217;s Favorite CodePen Demos

    David asked me if I'd be up for a guest post picking out some of my favorite Pens from CodePen. A daunting task! There are so many! I managed to pick a few though that have blown me away over the past few months. If you...

Incredible Demos

  • Create Your Own Dijit CSS Theme with LESS CSS

    The Dojo Toolkit seems to just get better and better.  One of the new additions in Dojo 1.6 was the use of LESS CSS to create Dijit themes.  The move to using LESS is a brilliant one because it makes creating your own Dijit theme...

  • jQuery Link Nudge Plugin

    A while back I debuted a tasteful mouseover/mouseout technique called link nudging. It started with a MooTools version and shortly thereafter a jQuery version. Just recently Drew Douglass premiered a jQuery plugin that aimed at producing the same type of effect....

Discussion

  1. It is very useful, thanks man ;) very good tutorials!

  2. ace

    What is wrong with standard browser’s anchor scroll? It is faster which is surely better for UX.

  3. @ace: I find the default browser behavior abrupt and crude. Smoothscroll is far more elegant.

  4. Dan

    …love your tuts but this one is not working in opera (at least in the latest beta, i.e. 10.52.3344) :-(

  5. hi David, can this script be modified so that the window can be any defined div other than the browser window?

    thanks, excellent site

  6. simon

    hi, how can i scroll if i’m already using acors for ajax stuff..? i’ve seen it on other pages – they scroll without using the ancor. thx

  7. One issue with this script is that it somewhat breaks the back button. Hitting back only changes the URL’s hash, but not the scroll position. I created a similar script a while back I called Gentle Anchors that fixes that issue, but it does have a jolt a the start of the scroll, which I may fix one day. I’m not saying mine is perfect either. Nice addition to MooTools.

  8. @David Walsh:
    Love this!
    I have added an earlier version of the effect to make my anchors ‘#top’ scroll smoothly to the top of the page:

    http://www.richardperkingolf.co.uk/index.aspx

    However it is effecting all ‘#’ references so when you click on the accordion menu on the right it too scrolls the page to the top.

    Do you know how I could edit this to only scroll to the top my ‘#top’ anchors?

  9. @Kendall: Thanks for the info, your script does it all for me. No problems with the back button, nice and small at 5k and by editing line 34 as you suggested /#[a-zA-Z0-9:\._-]+/ to /#top/ just targets my specific anchor and doesn’t interfere with the #p7APMc1_2 anchors in my accordion.

  10. Michael

    @jorge luis: According to a post of the google-group of mootools this is not possible as smoothScroll only targets the browser-window. You’ve got to use fx.scroll instead.

  11. Hello David,

    I am having some problems with this. It is working fine in all other browser except IE, however for some reason the one that you have is working.
    I am not sure if I am missing something. Can you please take a look at my website and let me know what is going on?

    Thanks in advance!!

  12. Jenny

    I got it to work, you can disgard the previous post. : )

  13. David, in your example, you don’t need to create empty anchor tags – you can simply place the id on the element you want to target (eg. h2) and also do away with the “name” attribute.

    It’s a shame you can’t apply transitions for SmoothScroll for Mootools 1.12. It was possible to do this in v1.11, and I think that was better and more flexible in that sense, than it is now :(

  14. Pier Luigi

    Hi David,
    I’ve discovered a bug with Safari (at least with latest 5.0.3) that prevent your anchor matching algorithm to work.
    To see the bug simply put your demo page inside a folder with a space (or other url special chars) into the name: in those cases, Safari report links.href in url-encoded format but location.href in plain string format so the match never occurs.

    For example: with a file testsmoothscroll.html inside a folder “spaced name folder”

    links.href = file:///spaced%20name%20folder/testsmoothscroll.html
    location.href = file:///spaced name folder/testsmoothscroll.html

    Bye.

  15. David

    Hi David,

    for the life of me I can’t get this to work. Any help would be appreciated.

    The code I’m using in the header of my page:

    new Fx.SmoothScroll({
    duration: 800
    },window);

    And the body:



    info

    The anchor works correctly, but without the smoothness. It’s probably something small and idiotic I’ve left out.

    Regards,
    David.

  16. David

    Oh dear, not sure if that code is displaying correctly. I’ll try it without the tags.

    The code I’m using in the header of my page:

    new Fx.SmoothScroll({
    duration: 800
    },window);

    And the body:


    info

  17. David

    I’ll try this one more time:

    header code:

    src=”js/mootools-core-1.3.js”>
    src=”js/mootools-more.js”>

    new Fx.SmoothScroll({
    duration: 800
    },window);

    Body code:

    Inventions

    info

  18. David

    I give up. Wrapping my code in the specified code tag or otherwise does not seem to work for me.

  19. Ed

    Hi David,
    I’m having a slight issue with the script. It works beautifully until spaces are introduced into the anchor then it switches to the browsers default method. Any idea of a work around for this? I’m generating my anchor id from the title of wordpress blog posts so occasionally there’ll be a space in there.

  20. is there a jquery version of this effect…

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!

Recently on David Walsh Blog

  • Chris Coyierâs Favorite CodePen Demos II

    Hey everyone! Before we get started, I just want to say it’s damn hard to pick this few favorites on CodePen. Not because, as a co-founder of CodePen, I feel like a dad picking which kid he likes best (RUDE). But because there is just so...

  • GSAP + SVG For Power Users: Motion Along A Path

    Now that the GreenSock API is picking up steam, there are many tutorials and Getting Started guides out there to provide good introductions to the library, not to mention GreenSock’s own Forum and Documentation. This article isn’t intended for beginners, but rather a...

  • Copy a Directory from Command Line

    Copying a directory for the sake of backup is something I do often, especially when I'm trying to figure out why something isn't working when I use an external library.  I'll copy the directory structure as a backup, mess around with the original source until I find a solution,...

  • Hotjar &#8211; All-in-one Analytics and Feedback

    Website analytics are a massive business -- the more data you can collect with regard to your users' behaviors on your site, the more you can increase and maximise conversion...and increased conversion is always good.  Sometimes increase conversion means more money, improved user experience, viewer retention,...

  • Crafting a 3D React Carousel

    There is something in me that is amazed but beautiful 3D interfaces. And it doesn’t matter whether they’re functional like Gyroscope features menu, technology demonstrators like the amazing periodic table demo from famous or they’re artistic representation pushing the limits of...