Smooth Scrolling to Anchor with jQuery
The days of abruptly jumping to an anchor link within a page are over. There exists different solutions to scroll smoothly.
What Smooth Scrolling to Anchor means ?
You click on a link, and the page smoothly and gracefully scrolls down to a specific section of content. This transition is easy on the eyes, it’s appealing, and damnit – it’s just plain cool!
We’ll utilize jQuery’s built-in function scrollTop() to do our heavy lifting.
This example works if your HTML is set up like so:
// content goes here <a name="top" /> <a href="#bottom">Link</a> // more content <a href="#top">Link</a> <a name="bottom" /> // more contentjQuery
$(function() { // scroll handler var scrollToAnchor = function( id ) { // grab the element to scroll to based on the name var elem = $("a[name='"+ id +"']"); // if that didn't work, look for an element with our ID if ( typeof( elem.offset() ) === "undefined" ) { elem = $("#"+id); } // if the destination element exists if ( typeof( elem.offset() ) !== "undefined" ) { // do the scroll $('html, body').animate({ scrollTop: elem.offset().top }, 1000 ); } }; // bind to click event $("a").click(function( event ) { // only do this if it's an anchor link if ( $(this).attr("href").match(/^#/) ) { // prevent default propagation event.preventDefault(); // scroll to the location var href = $(this).attr('href').replace('#', ''); scrollToAnchor( href ); // if we have pushState if ( history.pushState ) { history.pushState( null, null, '#'+href ); } // fallback to prevent jitter return false; } }); });
Just updated this again and added pushState in, so that it keeps track of the hash change in modern browsers. If a user clicks away after clicking your anchor link, it’ll take them back to the anchor position they were at instead of making them rescroll to that position.
Alternative 2
HTML
<a href="#target" class="scrollMe">Go to </a> <div id="target">Lorem Ipsum...</div>Jquery
$('a[href*=#]:not([href=#])').click(function() { if (location.pathname.replace(/^\//,'') == this.pathname.replace(/^\//,'') && location.hostname == this.hostname) { var target = $(this.hash); target = target.length ? target : $('[name=' + this.hash.slice(1) +']'); if (target.length) { $('html,body').animate({ scrollTop: target.offset().top - 20 }, 1000); return false; } } });Source: https://gist.github.com/jpederson/9496381
http://bradsknutson.com/blog/smooth-scrolling-to-anchor-with-jquery/
Im no expert, but I believe you just made an excellent You certainly understand what youre speaking about, and I can truly get behind that.
ReplyDeleteRegards,
Angularjs training in chennai