[JavaScript][页面定位]锚的简单使用

 [页面定位]锚的简单使用

1.使用window.location.hash定位到指定的锚

2.用 Javascript 实现点(Anchor)间平滑跳转

点(Anchor)相信很多人都不陌生,它方便访问者在页面的不同位置快速跳转,直接找到自己感兴趣的内容,如果说 RSS 是整个网站的摘要,那点就是一个页面的摘要,通常一个页面内容很多的时候,都会用点来定位。

但是点也有个问题,通常点击点后,页面会立即跳到目标位置,而本文介绍的方法,实现了点(Anchor)间平滑跳转,效果非常不错。


--------------------------------------------------------------
点此浏览示例文件
--------------------------------------------------------------


Javascript:


   
   
  1.  
  2. <script type= "text/javascript">
  3.  
  4. // 说明 :用 Javascript 实现点(Anchor)间平滑跳转
  5. // 来源 :ThickBox 2.1
  6. // 整理 :Yanfu Xie [xieyanfu@yahoo.com.cn]
  7. // 网址 :http://www.codebit.cn
  8. // 日期 :07.01.17
  9.  
  10. // 转换为数字
  11. function intval (v )
  12. {
  13. v = parseInt (v );
  14. return isNaN (v ) ? 0 : v;
  15. }
  16.  
  17. // 获取元素信息
  18. function getPos (e )
  19. {
  20. var l = 0;
  21. var t = 0;
  22. var w = intval (e. style. width );
  23. var h = intval (e. style. height );
  24. var wb = e. offsetWidth;
  25. var hb = e. offsetHeight;
  26. while (e. offsetParent ) {
  27. l += e. offsetLeft + (e. currentStyle?intval (e. currentStyle. borderLeftWidth ): 0 );
  28. t += e. offsetTop + (e. currentStyle?intval (e. currentStyle. borderTopWidth ): 0 );
  29. e = e. offsetParent;
  30. }
  31. l += e. offsetLeft + (e. currentStyle?intval (e. currentStyle. borderLeftWidth ): 0 );
  32. t += e. offsetTop + (e. currentStyle?intval (e. currentStyle. borderTopWidth ): 0 );
  33. return {x:l, y:t, w:w, h:h, wb:wb, hb:hb };
  34. }
  35.  
  36. // 获取滚动条信息
  37. function getScroll ( )
  38. {
  39. var t, l, w, h;
  40. if (document. documentElement && document. documentElement. scrollTop ) {
  41. t = document. documentElement. scrollTop;
  42. l = document. documentElement. scrollLeft;
  43. w = document. documentElement. scrollWidth;
  44. h = document. documentElement. scrollHeight;
  45. } else if (document. body ) {
  46. t = document. body. scrollTop;
  47. l = document. body. scrollLeft;
  48. w = document. body. scrollWidth;
  49. h = document. body. scrollHeight;
  50. }
  51. return { t: t, l: l, w: w, h: h };
  52. }
  53.  
  54. // 点(Anchor)间平滑跳转
  55. function scroller (el, duration )
  56. {
  57. if ( typeof el != 'object' ) { el = document. getElementById (el ); }
  58.  
  59. if (!el ) return;
  60.  
  61. var z = this;
  62. z. el = el;
  63. z. p = getPos (el );
  64. z. s = getScroll ( );
  65. z. clear = function ( ) {window. clearInterval (z. timer );z. timer= null };
  66. z. t= ( new Date ). getTime ( );
  67.  
  68. z. step = function ( ) {
  69. var t = ( new Date ). getTime ( );
  70. var p = (t - z. t ) / duration;
  71. if (t >= duration + z. t ) {
  72. z. clear ( );
  73. window. setTimeout ( function ( ) {z. scroll (z. p. y, z. p. x ) }, 13 );
  74. } else {
  75. st = ( (-Math. cos (p*Math. PI )/ 2 ) + 0.5 ) * (z. p. y-z. s. t ) + z. s. t;
  76. sl = ( (-Math. cos (p*Math. PI )/ 2 ) + 0.5 ) * (z. p. x-z. s. l ) + z. s. l;
  77. z. scroll (st, sl );
  78. }
  79. };
  80. z. scroll = function (t, l ) {window. scrollTo (l, t ) };
  81. z. timer = window. setInterval ( function ( ) {z. step ( ); }, 13 );
  82. }
  83.  
  84. </script>
  85.  




调用方式:
Code:


scroller(el, duration)

el : 目标 点 ID
duration : 持续时间,以毫秒为单位,越小越快




HTML:


   
   
  1.  
  2. <style type="text/css">
  3. div.test {
  4. width:400px;
  5. margin:5px auto;
  6. border:1px solid #ccc;
  7. }
  8. div.test strong {
  9. font-size:16px;
  10. background:#fff;
  11. border-bottom:1px solid #aaa;
  12. margin:0;
  13. display:block;
  14. padding:5px 0;
  15. text-decoration:underline;
  16. color:#059B9A;
  17. cursor:pointer;
  18. }
  19. div.test p {
  20. height:400px;
  21. background:#f1f1f1;
  22. margin:0;
  23. }
  24.  
  25. </style>
  26.  
  27. <div class="test">
  28. <a name="header_1" id="header_1"> </a>
  29. <strong onclick="javascript:scroller('header_4', 800);">header_1 --> header_4 </strong>
  30. <p> </p>
  31. </div>
  32.  
  33. <div class="test">
  34. <a name="header_2" id="header_2"> </a>
  35. <strong onclick="javascript:scroller('header_5', 800);">header_2 --> header_5 </strong>
  36. <p> </p>
  37. </div>
  38.  
  39. <div class="test">
  40. <a name="header_3" id="header_3"> </a>
  41. <strong onclick="javascript:scroller('header_6', 800);">header_3 --> header_6 </strong>
  42. <p> </p>
  43. </div>
  44.  
  45. <div class="test">
  46. <a name="header_4" id="header_4"> </a>
  47. <strong onclick="javascript:scroller('header_7', 800);">header_4 --> header_7 </strong>
  48. <p> </p>
  49. </div>
  50.  
  51. <div class="test">
  52. <a name="header_5" id="header_5"> </a>
  53. <strong onclick="javascript:scroller('header_3', 800);">header_5 --> header_3 </strong>
  54. <p> </p>
  55. </div>
  56.  
  57. <div class="test">
  58. <a name="header_6" id="header_6"> </a>
  59. <strong onclick="javascript:scroller('header_2', 800);">header_6 --> header_2 </strong>
  60. <p> </p>
  61. </div>
  62.  
  63. <div class="test">
  64. <a name="header_7" id="header_7"> </a>
  65. <strong onclick="javascript:scroller('header_1', 800);">header_7 --> header_1 </strong>
  66. <p> </p>
  67. </div>
  68.  

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值