javascript 动态数据下的锚点错位问题解决方法


Posted in Javascript onDecember 24, 2008
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
<title>用 Javascript 实现锚点(Anchor)间平滑跳转</title> 

<script language="javascript"> 

// 说明 :用 Javascript 实现锚点(Anchor)间平滑跳转 

 

// 转换为数字 

function intval(v) 

{
 

v = parseInt(v);
 

return isNaN(v) ? 0 : v; 

}  

// 获取元素信息 

function getPos(e) 

{
 

var l = 0;
 

var t = 0;
 

var w = intval(e.style.width);
 

var h = intval(e.style.height);
 

var wb = e.offsetWidth;
 

var hb = e.offsetHeight;
 

while (e.offsetParent) 

{

 

 l += e.offsetLeft + (e.currentStyle?intval(e.currentStyle.borderLeftWidth):0);

 

 t += e.offsetTop + (e.currentStyle?intval(e.currentStyle.borderTopWidth):0);

 

 e = e.offsetParent;
 

 }
 

 l += e.offsetLeft + (e.currentStyle?intval(e.currentStyle.borderLeftWidth):0);
 

 t += e.offsetTop + (e.currentStyle?intval(e.currentStyle.borderTopWidth):0);
 

 return {x:l, y:t, w:w, h:h, wb:wb, hb:hb}; }  

 // 获取滚动条信息 

 function getScroll()  

 {
 

 var t, l, w, h;

  

 if (document.documentElement && document.documentElement.scrollTop) 

 {

 

 t = document.documentElement.scrollTop;

 

 l = document.documentElement.scrollLeft;

 

 w = document.documentElement.scrollWidth;

 

 h = document.documentElement.scrollHeight;
 

 } 

 else if (document.body) 

 {

 

 t = document.body.scrollTop;

 

 l = document.body.scrollLeft;

 

 w = document.body.scrollWidth;

 

 h = document.body.scrollHeight;
 

 }
 

 return { t: t, l: l, w: w, h: h }; 

 }  

 // 锚点(Anchor)间平滑跳转 

 function scroller(el, duration) 

 {
 

 if(typeof el != 'object') 

 { 

 el = document.getElementById(el); 

 }
  

 if(!el) return;
  

 var z = this;
 

 z.el = el;
 

 z.p = getPos(el);
 

 z.s = getScroll();
 

 z.clear = function() 

 { 

 window.clearInterval(z.timer);z.timer=null 

 };
 

 z.t=(new Date).getTime();
  

 z.step = function() 

 {

 

 var t = (new Date).getTime();

 

 var p = (t - z.t) / duration;

 

 if (t >= duration + z.t) 

 {


 

 z.clear();


 

 window.setTimeout(function(){z.scroll(z.p.y, z.p.x)},13);

 } 

 else {


 

 st = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.y-z.s.t) + z.s.t;


 

 sl = ((-Math.cos(p*Math.PI)/2) + 0.5) * (z.p.x-z.s.l) + z.s.l;


 

 z.scroll(st, sl);

 

 }
 

 };
 

 z.scroll = function (t, l){window.scrollTo(l, t-20)};
 

 z.timer = window.setInterval(function(){z.step();},13); 

 } 

</script> 

<style type="text/css"> 

div.test 

{
 

width:400px;
 margin:5px auto;
 border:1px solid #ccc; 

} 

div.test strong 

{
 font-size:16px;
 background:#fff;
 border-bottom:1px solid #aaa;
 margin:0;
 display:block;
 padding:5px 0;
 text-decoration:underline;
 color:#059B9A;
 cursor:pointer; } div.test p {
 height:400px;
 background:#f1f1f1;
 margin:0; 

} 

 </style> 
</head> 
<body> 

<form id="form1" runat="server"> 

<div class="test">
 

<a name="header_1" id="header_1"></a>
 

<strong onclick="javascript:scroller('header_4', 800);">header_1 --> header_4</strong><p></p> 

</div>  

<div class="test">
 

<a name="header_2" id="header_2"></a>
 

<strong onclick="javascript:scroller('header_5', 800);">header_2 --> header_5</strong><p></p> 

</div>  

<div class="test">
 

<a name="header_3" id="header_3"></a>
 

<strong onclick="javascript:scroller('header_6', 800);">header_3 --> header_6</strong><p></p> 

</div>  

<div class="test">
 

<a name="header_4" id="header_4"></a>
 

<strong onclick="javascript:scroller('header_7', 800);">header_4 --> header_7</strong><p></p> 

</div>  

<div class="test">
 

<a name="header_5" id="header_5"></a>
 

<strong onclick="javascript:scroller('header_3', 800);">header_5 --> header_3</strong><p></p> 

</div>  

<div class="test">
 

<a name="header_6" id="header_6"></a>
 

<strong onclick="javascript:scroller('header_2', 800);">header_6 --> header_2</strong><p></p> 

</div>  

<div class="test">
 

<a name="header_7" id="header_7"></a>
 

<strong onclick="javascript:scroller('header_1', 800);">header_7 --> header_1</strong><p></p> 

</div> 

</form> 
</body> 
</html>
Javascript 相关文章推荐
Javascript学习笔记5 类和对象
Jan 11 Javascript
Jquery实战_读书笔记2 选择器
Jan 22 Javascript
js以对象为索引的关联数组
Jul 04 Javascript
使用js 设置url参数
Jul 08 Javascript
JS中typeof与instanceof之间的区别总结
Nov 14 Javascript
jQuery+ajax实现鼠标单击修改内容的思路
Jun 29 Javascript
javascript实时显示当天日期的方法
May 20 Javascript
jQuery实现商品活动倒计时
Oct 16 Javascript
继续学习javascript闭包
Dec 03 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
LayUI表格批量删除方法
Aug 15 Javascript
vue实现验证用户名是否可用
Jan 20 Vue.js
javascript 网页跳转的方法
Dec 24 #Javascript
javascript prototype,executing,context,closure
Dec 24 #Javascript
JavaScript 事件参考手册
Dec 24 #Javascript
javascript XML数据显示为HTML一例
Dec 23 #Javascript
window.location和document.location的区别分析
Dec 23 #Javascript
javascript 硬盘序列号+其它硬件信息
Dec 23 #Javascript
js 解决“options为空或不是对象”
Dec 22 #Javascript
You might like
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
PHP判断远程url是否有效的几种方法小结
2011/10/08 PHP
php中经典方法实现判断多维数组是否为空
2011/10/23 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
JavaScript window.setTimeout() 的详细用法
2009/11/04 Javascript
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
jQuery()方法的第二个参数详解
2015/04/29 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
vue利用better-scroll实现轮播图与页面滚动详解
2017/10/20 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
2019/02/21 Python
Python笔记之观察者模式
2019/11/20 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
Python环境配置实现pip加速过程解析
2020/11/27 Python
使用CSS3美化HTML表单的技巧演示
2016/05/17 HTML / CSS
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
英国Office鞋店德国网站:在线购买鞋子、靴子和运动鞋
2018/12/19 全球购物
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
YII2 全局异常处理深入讲解
2021/03/24 PHP
暑假社会实践心得体会
2014/09/02 职场文书
2014领导班子四风剖析对照检查材料思想汇报
2014/09/20 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
2014年民警工作总结
2014/11/25 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
管辖权异议上诉状
2015/05/23 职场文书
新闻简讯格式及范文
2015/07/22 职场文书
主婚人致辞精选
2015/07/28 职场文书
Python基础教程,Python入门教程(超详细)
2021/06/24 Python