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

项目中经常会出现点击跳转锚点的方法,比如给一个a标签一个href=“#锚点”,然后要跳的锚点给个id=“锚点”,这样就实现简单的跳转,但是这样在url地址栏后面都会出现一个诸如www.csdn.net#锚点,然后你点击给一次后退都是退回上一个选择的锚点url,这里总结一些跳转锚点的方法。

第一种方法,也是最简单的方法是锚点用<a>标签,在href属性中写入DIV的id。如下:

 

 
  1. <!DOCTYPE html>  
  2. <html>  
  3. <head>  
  4. <style>  
  5. div {  
  6. height: 800px;  
  7. width: 400px;  
  8. border: 2px solid black;  
  9. }  
  10. h2 {  
  11. position: fixed;  
  12. margin:50px 500px;  
  13. }  
  14. </style>  
  15. </head>  
  16. <body>  
  17. <h2>  
  18. <href="#div1">to div1</a>  
  19. <href="#div2">to div2</a>  
  20. <href="#div3">to div3</a>  
  21. </h2>  
  22. <div id="div1">div1</div>  
  23. <div id="div2">div2</div>  
  24. <div id="div3">div3</div>  
  25. </body>  
  26. </html>  

 

这种方法的缺点是点击锚点之后,浏览器的URL会发生变化,如果刷新可能会出现问题。 

第二种方法是在js事件中通过window.location.hash="divId"跳转,但地址也会发生变化,感觉跟第一种方法没区别,甚至更麻烦。

第三种方法是用animate属性,当点击锚点后,页面滚动到相应的DIV。接着上面的代码,具体添加如下代码:

  1. <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>  
  2. <script type="text/javascript">  
  3. $(document).ready(function() {  
  4. $("#div1Link").click(function() {  
  5. $("html, body").animate({  
  6. scrollTop: $("#div1").offset().top }, {duration: 500,easing: "swing"});  
  7. return false;  
  8. });  
  9. $("#div2Link").click(function() {  
  10. $("html, body").animate({  
  11. scrollTop: $("#div2").offset().top }, {duration: 500,easing: "swing"});  
  12. return false;  
  13. });  
  14. $("#div3Link").click(function() {  
  15. $("html, body").animate({  
  16. scrollTop: $("#div3").offset().top }, {duration: 500,easing: "swing"});  
  17. return false;  
  18. });  
  19. });  
  20. </script>  

 

注意:运行上面的脚本的之前,先将为锚点增加相应的id,同时去掉href属性。   

$("html, body")可以替换为响应的div,如果不起作用,试着给该div增加overflow:scroll属性。

另外,脚本可以进一步优化,自己来试试

这样做的好处是:URL地址不会变,同时点击锚点时会自动响应scroll事件,不需要重新绑定。

缺点是:如果页面复杂的话,偏移值可能会发生变化需要算法辅助。

 

第四种方法是用js的srollIntoView方法,直接用:
document.getElementById("divId").scrollIntoView();

比如:

document.querySelector("#roll1").onclick = function(){  
      document.querySelector("#roll1_top").scrollIntoView(true);  
}  

这里就是点击id是#roll1的元素可以滚动到id是#roll1_top的地方,这里的#roll1和#roll1_top最好是一一对应的,
这种方法的好处,是URL不会变,同时能够响应相应的scroll事件,不需要算法什么的。代码如下:

 

 
  1. <html>  
  2.     <head>  
  3.         <title>HTML5_ScrollInToView方法</title>  
  4.         <meta  charset="utf-8">  
  5.         <script type="text/javascript">  
  6.             window.onload = function(){  
  7.                 /*  
  8.                     如果滚动页面也是DOM没有解决的一个问题。为了解决这个问题,浏览器实现了一下方法,  
  9.                 以方便开发人员如何更好的控制页面的滚动。在各种专有方法中,HTML5选择了scrollIntoView()  
  10.                 作为标准方法。  
  11.                     scrollIntoView()可以在所有的HTML元素上调用,通过滚动浏览器窗口或某个容器元素,  
  12.                 调用元素就可以出现在视窗中。如果给该方法传入true作为参数,或者不传入任何参数,那么  
  13.                 窗口滚动之后会让调动元素顶部和视窗顶部尽可能齐平。如果传入false作为参数,调用元素  
  14.                 会尽可能全部出现在视口中(可能的话,调用元素的底部会与视口的顶部齐平。)不过顶部  
  15.                 不一定齐平,例如:  
  16.                 //让元素可见  
  17.                 document.forms[0].scrollIntoView();  
  18.                 当页面发生变化时,一般会用这个方法来吸引用户注意力。实际上,为某个元素设置焦点也  
  19.                 会导致浏览器滚动显示获得焦点的元素。  
  20.                     支持该方法的浏览器有 IE、Firefox、Safari和Opera。  
  21.                 */  
  22.                   
  23.                   
  24.                 document.querySelector("#roll1").onclick = function(){  
  25.                     document.querySelector("#roll_top").scrollIntoView(false);  
  26.                 }  
  27.                 document.querySelector("#roll2").onclick = function(){  
  28.                     document.querySelector("#roll_top").scrollIntoView(true);  
  29.                 }  
  30.             }  
  31.         </script>   
  32.         <style type="text/css">  
  33.             #myDiv{  
  34.                 height:900px;  
  35.                 background-color:gray;  
  36.                   
  37.             }  
  38.             #roll_top{  
  39.                 height:900px;  
  40.                 background-color:green;  
  41.                 color:#FFF;  
  42.                 font-size:50px;  
  43.                 position:relative;  
  44.             }  
  45.             #bottom{  
  46.                 position:absolute;  
  47.                 display:block;  
  48.                 left;0;bottom:0;  
  49.             }  
  50.         </style>  
  51.     </head>  
  52.     <body>  
  53.         <button id="roll1">scrollIntoView(false)</button>  
  54.         <button id="roll2">scrollIntoView(true)</button>  
  55.         <div id="myDiv"></div>  
  56.         <div id="roll_top">  
  57.             scrollIntoView(ture)元素上边框与视窗顶部齐平  
  58.             <span id="bottom">scrollIntoView(false)元素下边框与视窗底部齐平</span>  
  59.         </div>   
  60.     </body>  
  61. </html>  

个人建议使用第四种方法。

 

 

posted @ 2018-02-04 22:43  李慕白520  阅读(572)  评论(0编辑  收藏  举报