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 相关文章推荐
js抽奖实现随机抽奖代码效果
Dec 02 Javascript
jQuery实现的动态伸缩导航菜单实例
May 07 Javascript
javascript实现倒计时并弹窗提示特效
Jun 05 Javascript
jQuery实现多级联动下拉列表查询框
Jan 18 Javascript
Jquery轮播效果实现过程解析
Mar 30 Javascript
JS for循环中i++ 和 ++i的区别介绍
Jul 20 Javascript
JS触发服务器控件的单击事件(详解)
Aug 06 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
Mar 02 Javascript
ReactNative中使用Redux架构总结
Dec 15 Javascript
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
Jul 31 Javascript
实例详解vue中的$root和$parent
Apr 29 Javascript
使用axios请求接口,几种content-type的区别详解
Oct 29 Javascript
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
PHP的SQL注入实现(测试代码安全不错)
2011/02/27 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
php实现购物车功能(上)
2020/07/23 PHP
Yii2增加验证码步骤详解
2016/04/25 PHP
PHP实现中国公民身份证号码有效性验证示例代码
2017/05/03 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
jQuery实现长文字部分显示代码
2013/05/13 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
jquery实现checkbox 全选/全不选的通用写法
2014/02/22 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
vue购物车插件编写代码
2017/11/27 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
Python一键查找iOS项目中未使用的图片、音频、视频资源
2019/08/12 Python
py-charm延长试用期限实例
2019/12/22 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
纪伊国屋泰国网上书店:Kinokuniya泰国
2017/12/24 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
医药代表个人求职信范本
2013/12/19 职场文书
开工庆典邀请函范文
2014/01/16 职场文书
护理专业自荐书
2014/06/04 职场文书
标准毕业生自荐信
2014/06/24 职场文书
学生检讨书
2015/01/27 职场文书
安徽导游词
2015/02/12 职场文书
道歉信怎么写
2015/05/12 职场文书
关于职业道德的心得体会
2016/01/18 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书