zoukankan      html  css  js  c++  java
  • 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.  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>  

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

     

  • 相关阅读:
    C#-练习题
    C#-命名空间(十五)
    C#-枚举(十三)
    C#-多态(十二)
    C#-继承(十一)
    C#-结构体(十)
    C#-类(九)
    C#-方法(八)
    二叉树深度遍历和广度遍历
    iOS main.m解析
  • 原文地址:https://www.cnblogs.com/lxl57610/p/8414689.html
Copyright © 2011-2022 走看看