页面内锚点定位及跳转方法总结
1、最简单的方法是锚点用<a>标签,在href属性中写入DIV的id。如下:
<!DOCTYPE html> <html> <head> </head> <body> <h2> <a href="#div1" class="div1">to div1</a> <a href="#div2" class="div2">to div2</a> <a href="#div3" class="div3">to div3</a> </h2> <div id="div1">div1</div> <div id="div2">div2</div> <div id="div3">div3</div> </body> </html>
这种方法的缺点是点击锚点之后,浏览器的URL会发生变化,如果刷新可能会出现问题。
2、第二种方式是在js事件中通过window.location.hash="divId"跳转,但地址也会发生变化,感觉跟第一种方法没区别,甚至更麻烦。
3、第三种方法是用animate属性,当点击锚点后,页面滚动到相应的DIV。接着上面的代码,具体添加如下代码:
1 $(document).ready(function(){ 2 $(".div1").click(function() { 3 var div1 = $('#div1').offset().top; 4 $('html,body').animate({scrollTop: div1}, 500); 5 }); 6 $(".div2").click(function() { 7 // -65 向上偏移65px 8 var div2 = $('#div2').offset().top-65; 9 $('html,body').animate({scrollTop: div2}, 500); 10 }) 11 })
注意:运行上面的脚本的之前,先将为锚点增加相应的id,同时去掉href属性。
这样做的好处是:URL地址不会变,同时点击锚点时会自动响应scroll事件,不需要重新绑定。
4、第四种方法是用js的srollIntoView方法,直接用:
document.getElementById("divId").scrollIntoView();
这种方法的好处,是URL不会变,同时能够响应相应的scroll事件,不需要算法什么的。