Scrolling “Go To Top” Link Using Dojo

By  on  

One of the most popular code snippets of posted on my blog has been the scrolling "Go To Top" link snippet. The premise of the snippet is simple: once the user scrolls an element (usually the BODY element) past a given threshold, a "Go To Top" anchor fades into view. Simple, stylish, and functional -- the definition of a good JavaScript-powered enhancement. I've showed you how to accomplish this task using jQuery and MooTools; here's how you can accomplish that same effect using Dojo.

The HTML

<a href="#top" id="gototop" class="no-click no-print">Top of Page</a>
<!-- you could also create this dynamically using dojo -->

Just a simple "top" link.

The CSS

	#gototop { visibility:hidden; position:fixed; right:5px; bottom:5px; color:#999; font-weight:bold; text-decoration:none; border:1px solid  #ccc; background:#eee; padding:10px; }

It's important to hide the element during the initial page load.

The Dojo JavaScript

dojo.ready(function() {
	var link = dojo.byId("gototop");
	dojo.style(link,{ opacity: 0, visibility:"hidden" });
	dojo.connect(window,"onscroll",function(e) {
		var scrollY = -dojo.position(dojo.body()).y, thresh = 100;
		dojo.anim(topLink, { opacity: (scrollY > thresh ? 1 : 0 ) });
	});
});

When the DOM is ready we grab the link, styling it so that it will hidden via visibility instead of display. On each scroll of the body, we calculate the position of the page and show or hide the link depending on the page position. Easy!

There you have it. Another framework, another flavor of JavaScript, another awesome snippet. Happy scrolling!

Recent Features

  • By
    7 Essential JavaScript Functions

    I remember the early days of JavaScript where you needed a simple function for just about everything because the browser vendors implemented features differently, and not just edge features, basic features, like addEventListener and attachEvent.  Times have changed but there are still a few functions each developer should...

  • By
    Write Better JavaScript with Promises

    You've probably heard the talk around the water cooler about how promises are the future. All of the cool kids are using them, but you don't see what makes them so special. Can't you just use a callback? What's the big deal? In this article, we'll...

Incredible Demos

  • By
    Control Element Outline Position with outline-offset

    I was recently working on a project which featured tables that were keyboard navigable so obviously using cell outlining via traditional tabIndex=0 and element outlines was a big part of allowing the user navigate quickly and intelligently. Unfortunately I ran into a Firefox 3.6 bug...

  • By
    Highlight Table Rows, Columns, and Cells Using MooTools 1.2.3

    Row highlighting and individual cell highlighting in tables is pretty simple in every browser that supports :hover on all elements (basically everything except IE6). Column highlighting is a bit more difficult. Luckily MooTools 1.2.3 makes the process easy. The XHTML A normal table. The cells...

Discussion

  1. smion

    hey, your demo isn’t working for me (firefox 3.6.3) – the button appears but it doesn’t scroll to top ;)

    ps: it would be VERY helpfull, if you can trans-code this to mootools :-)

  2. @smion: Updated the link. Also — there’s a link to the MooTools version above.

  3. Champ

    Walsh… I am having trouble getting it to go back up. How do you get yours to go up?

  4. Very useful tutorial. I will try to apply it on my blog. Good work.

  5. Catar4x

    I love it ! Thank you David !

    If you can do this for all anchor link, it would be sick !

  6. @Catar4x

    Do you mean something like this?

    http://www.cinsoft.net/mylib-examples.html#scrollinganchors

    PS. Dojo sucks!

  7. Catar4x

    Yeah, David made this one time for Mootools. :)

  8. Manoj

    Thank u so much…Very useful tutorial. I will try to apply it on my blog. Good work

  9. SSK

    Thank you David… simple and nice scroll….

  10. robot

    It works in IE and Firefox, but no in Chrome! How to solve of it? Thanks!

  11. Roman

    it not work in safari too.
    it is bad news for us!

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