在平时的项目中,我们经常需要一些特效链接,如果使效果进一步加强,我们可以使点击锚点链接平滑滚动到锚点,下面就来给大家讲解下如何使用jQuery来实现。
一般使用锚点来跳转到页面指定位置的时候,会生硬地立即跳转到指定位置,但是有些时候我们想要平滑地过渡到指定的位置,那么可以使用JQuery简单的实现这个效果:
比如,这里我们将通过点击<a>标签跳转到 id为content的指定位置那里。
1
|
< a id = "turnToContent" href = "#content" ></ a >
|
然后呢,就在我们想要的位置设置id为content的内容块,这里用一个div模拟一篇不像文章的文章。最好将此div放在靠后的位置,这样效果就很明显一点,如果只是测试一下这个效果,可以用简单粗暴的方法,在其前面放很多个<p>标签即可。
1
2
3
4
5
6
7
8
9
|
< div id = "content" >
< h2 >
< a href = "###" >HTML5</ a >
</ h2 >
< p >
html5html5html5 </ p >
< p class = "addMes" >标签: < span >HTML5</ span >< small >2015年4月19日</ small ></ p >
</ div >
|
最后就是用JQuery来实现平滑过渡的效果了:
1
2
3
4
5
6
|
$( '#turnToContent' ).click( function () {
$( 'html, body' ).animate({
scrollTop: $($.attr( this , 'href' )).offset().top
}, 500); return false ;
}); |
搞定了!
下面我们来继续改进一下,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$( function (){
$( 'a[href*=#],area[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) {
var targetOffset = $target.offset().top;
$( 'html,body' ).animate({
scrollTop: targetOffset
},
1000);
return false ;
}
}
});
}) |
改进后的代码的好处是点击锚点链接平滑滚动到锚点,并且浏览器URL后缀不带有锚点字样,使用的过程中基本不用修改以上代码即可实现。