页面内锚点定位及跳转方法总结

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事件,不需要算法什么的。

原文地址:https://www.cnblogs.com/shiweida/p/8313626.html