Skip to the content...

Welcome to the David Walsh Blog. I'm a MooTools, Dojo, jQuery, CSS, and PHP Web Developer located in Madison, Wisconsin, United States. Please contact me if I can make your experience on my website better.

jQuery topLink Plugin

28 Responses »

Last week I released a snippet of code for MooTools that allowed you to fade in and out a "to the top" link on any page. Here's how to implement that functionality using jQuery.

The XHTML

<a href="#top" id="top-link">Top of Page</a>

A simple link.

The CSS

#top-link	{ display:none; position:fixed; right:5px; bottom:5px; color:green; font-weight:bold; text-decoration:none; border:1px solid green; background:Lightgreen; padding:10px; }

A little CSS for position and style.

The jQuery JavaScript

//plugin
jQuery.fn.topLink = function(settings) {
	settings = jQuery.extend({
		min: 1,
		fadeSpeed: 200
	}, settings);
	return this.each(function() {
		//listen for scroll
		var el = $(this);
		el.hide(); //in case the user forgot
		$(window).scroll(function() {
			if($(window).scrollTop() >= settings.min)
			{
				el.fadeIn(settings.fadeSpeed);
			}
			else
			{
				el.fadeOut(settings.fadeSpeed);
			}
		});
	});
};

//usage w/ smoothscroll
$(document).ready(function() {
	//set the link
	$('#top-link').topLink({
		min: 400,
		fadeSpeed: 500
	});
	//smoothscroll
	$('#top-link').click(function(e) {
		e.preventDefault();
		$.scrollTo(0,300);
	});
});

You'll see that I've added jQuery's ScrollTo plugin to add some smoothness to the anchor.

Please note that this version doesn't work with Internet Explorer due to IE's lack of CSS "position:fixed" support. Here is a shotty attempt at IE support:

//plugin
jQuery.fn.topLink = function(settings) {
		settings = jQuery.extend({
			min: 1,
			fadeSpeed: 200,
			ieOffset: 50
		}, settings);
		return this.each(function() {
			//listen for scroll
			var el = $(this);
			el.css('display','none'); //in case the user forgot
			$(window).scroll(function() {
				//stupid IE hack
				if(!jQuery.support.hrefNormalized) {
					el.css({
						'position': 'absolute',
						'top': $(window).scrollTop() + $(window).height() - settings.ieOffset
					});
				}
				if($(window).scrollTop() >= settings.min)
				{
					el.fadeIn(settings.fadeSpeed);
				}
				else
				{
					el.fadeOut(settings.fadeSpeed);
				}
			});
		});
	};

Know of a better way to incorporate IE support? Share it!

Discussion

  1. March 2, 2009 @ 8:38 am

    Hmm… I thought you can do el.hide() instead of el.css(‘display’,'none’)? :P

  2. March 2, 2009 @ 8:49 am

    Wow, nice plugin, I think I might incorporate this into a website in the not so long future. And good luck with the submission to the JQuery website :)

  3. March 2, 2009 @ 9:08 am

    @Lim Chee Aun: Good call! Updated.

  4. March 2, 2009 @ 12:33 pm

    If you use something like this:

    body { overflow: hidden; }
    div.content {
    height: 100%;
    overflow: auto;
    }

    shouldn’t work? I will have to try it :), nice article anyway

  5. ben
    March 2, 2009 @ 11:33 pm

    It shows up fine but when I click it, it doesn’t scroll. Do you know why this would be?

  6. March 3, 2009 @ 3:25 am

    Hi David! I translate to Turkish and publish to my site. I hope you like it. Here is link -> http://www.kadirgunay.com/jquery-top-link-jquery-yukari-cik-baglantisi.html
    And i added your link bottom of the article :)

    Thank you, and see you

    Kadir,

  7. March 3, 2009 @ 11:59 am

    Nice job David !!

  8. March 3, 2009 @ 2:31 pm

    Hi All,
    Nice plugin and really useful. I’ve got a fix for IE7 (need to test ie6 if you care about it)

    Basically I added the last value in the full CSS below *height: 1.5%
    For those who don’t know the hack. The * makes it an IE7 value only (you could use _ for ie6) and FFox ignores it. I don’t think its W3C standards though but it does the job.

    #top-link {
    display: none;
    position:fixed;
    right: 5px;
    bottom: 5px;
    color: #eeefea;
    font-weight: bold;
    text-decoration: none;
    border: 2px solid #1d2835;
    background: #222b3a;
    padding: 6px 10px;
    *height: 1.5%
    }

    As for t the problem of the full script not working. I had a hard time with it too. Copying and pasting the code doesn’t work for some reason so I downloaded the demo example and striped out what I needed and it worked. I hope this was usefull to someone.

  9. faisal alim
    March 3, 2009 @ 3:09 pm

    i like it

  10. March 4, 2009 @ 3:22 am

    nice one..surely goin 2 try my hands on it!!

  11. March 7, 2009 @ 12:59 am

    Awesome script David! Implemented it on opensourcereleasefeed.com. Thanks!

  12. March 18, 2009 @ 5:12 pm

    I love the solution! Good work!

  13. javis
    April 19, 2009 @ 8:46 am

    wow nice , i m going to use it on my blog

  14. June 1, 2009 @ 5:48 am

    I noticed its not working with IE…is there a way to solve it i need it…!

  15. June 1, 2009 @ 8:01 am

    Works for me!

  16. August 6, 2009 @ 1:49 pm

    Has anyone yet mentioned today that IE sucks?

  17. August 6, 2009 @ 2:10 pm

    David you do not cease to surprise :)

  18. matt
    September 2, 2009 @ 2:28 pm

    A really amazing idea David, thanks! I made a similar plugin inspired by yours,
    nice work!

  19. pawan
    September 3, 2009 @ 2:18 am

    @Matt,
    I saw your plugin, looks very good. Can you tell how to use it to scroll to any specific control, rather than to the top of the page.

    In my case, I want to scroll to say my DIV named “header” : <div id=”header”> </div>

    Thanks,
    Pawan

  20. September 15, 2009 @ 2:24 am

    Important thing for a longer post. Thanks. I will publish it in my Bangla blog Bangla Hacks.

  21. October 3, 2009 @ 11:08 am

    Hey David,

    Just wanted to add that this is a fantastic script, many thanks for producing it. I am implementing it slightly differently, without the fixed positioning, so no IE problems so far!

    Many thanks again,

    DanC

  22. November 23, 2009 @ 2:34 pm

    nice plugin..
    thanks.. :)

  23. December 13, 2009 @ 6:42 pm

    I would like to thank you so much! I have been trying with JS to work this out, with no avail. This helps so much. I even bookmarked your site! (Which for me is a rarity) I will also link you back on my index.

    Thanks again,

    Tm0.

  24. December 19, 2009 @ 2:41 am

    where i must place javascript code for blogger

    example: between or ???

  25. January 3, 2010 @ 6:34 am

    Hey David,

    Happy New Year to you! Just wanted to drop you a quick note about topLink. I have been using it often in my web dev work and really enjoy the usability it adds to sites.

    I actually think all sites should implement some version of back to top and as such I converted your topLink plugin into a Chrome extension ;) https://chrome.google.com/extensions/detail/afpmpmikeidpfnfmnmlpecnoipnnnfmn

  26. February 19, 2010 @ 2:55 am

    I had this working on my site and now I can’t get it to scroll to the top of the page. Does anyone know how to fix this problem?

  27. March 20, 2010 @ 12:29 am

    Thanks for showing us how to make this effect. Nice work!

  28. mark
    May 14, 2010 @ 5:05 pm

    Do I use both of the provided codes in one .js file to have support in all browsers?

    As you’ve not mentioned how to use it.

    And I’m not sure of javascript just yet.

    Because I already have on of these but it isn’t supported in IE.

    So use both in one .js file? or what to do with the IE fix code?

    Thanks (I’ve subbed to comments).

Be Heard!

Share your thoughts with fellow developers of all skill levels! I want to hear from you!

Name*:
Email*:
Website:  
Wrap your code with <code> tags, f00!