How to scroll up or down the page to an anchor using jQuery?
I'm looking for a way to include a slide effect for when you click a link to a local anchor either up or down the page.
I'd like something where you have a link like so:
<a href="#nameofdivetc">link text, img etc.</a>
perhaps with a class added so you know you want this link to be a sliding link:
<a href="#nameofdivetc" class="sliding-link">link text, img etc.</a>
Then if this link is clicked, the page slides up or down to the required place (could be a div, heading, top of page etc).
This is what I had previously:
$(document).ready(function(){
$(".scroll").click(function(event){
//prevent the default action for the click event
event.preventDefault();
//get the full url - like mysitecom/index.htm#home
var full_url = this.href;
//split the url by # and get the anchor target name - home in mysitecom/index.htm#home
var parts = full_url.split("#");
var trgt = parts[1];
//get the top offset of the target anchor
var target_offset = $("#"+trgt).offset();
var target_top = target_offset.top;
//goto that anchor by setting the body scroll top to anchor top
$('html, body').animate({scrollTop:target_top}, 1500, 'easeInSine');
});
});
Solution 1:
Description
You can do this using jQuery.offset()
and jQuery.animate()
.
Check out the jsFiddle Demonstration.
Sample
function scrollToAnchor(aid){
var aTag = $("a[name='"+ aid +"']");
$('html,body').animate({scrollTop: aTag.offset().top},'slow');
}
scrollToAnchor('id3');
More Information
- jsFiddle Demonstration
- jQuery.offset()
- jQuery.animate()
Solution 2:
Assuming that your href attribute is linking to a div with the tag id with the same name (as usual), you can use this code:
HTML
<a href="#goto" class="sliding-link">Link to div</a>
<div id="goto">I'm the div</div>
JAVASCRIPT - (Jquery)
$(".sliding-link").click(function(e) {
e.preventDefault();
var aid = $(this).attr("href");
$('html,body').animate({scrollTop: $(aid).offset().top},'slow');
});
Solution 3:
function scroll_to_anchor(anchor_id){
var tag = $("#"+anchor_id);
$('html,body').animate({scrollTop: tag.offset().top},'slow');
}