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不能跳转到上一页面的问题解决方法
Mar 01 Javascript
JS阻止用户多次提交示例代码
Mar 26 Javascript
JavaScript使用HTML5的window.postMessage实现跨域通信例子
Apr 11 Javascript
D3.js实现饼状图的方法详解
Sep 21 Javascript
jQuery实现select下拉框获取当前选中文本、值、索引
May 08 jQuery
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
Jun 05 jQuery
详解Webpack-dev-server的proxy用法
Sep 08 Javascript
Vue开发Html5微信公众号的步骤
Apr 11 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 Javascript
javascript 代码是如何被压缩的示例代码
May 06 Javascript
js判断鼠标移入移出方向的方法
Jun 24 Javascript
手写Spirit防抖函数underscore和节流函数lodash
Mar 22 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 程序员也要学会使用“异常”
2009/06/16 PHP
PHP四舍五入精确小数位及取整
2014/01/14 PHP
使用jQuery实现的网页版的个人简历(可换肤)
2013/04/19 Javascript
jQuery+PHP实现动态数字展示特效
2015/03/14 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
vue项目打包部署到服务器的方法示例
2018/08/27 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
python实现爬取千万淘宝商品的方法
2015/06/30 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Python编程修改MP3文件名称的方法
2017/04/19 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
python实现雨滴下落到地面效果
2018/06/21 Python
用Python实现读写锁的示例代码
2018/11/05 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
python框架django项目部署相关知识详解
2019/11/04 Python
python判断无向图环是否存在的示例
2019/11/22 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
python 6种方法实现单例模式
2020/12/15 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
香港零食网购:上仓胃子
2020/06/08 全球购物
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
中学生学习生活的自我评价
2013/10/26 职场文书
人力资源管理毕业生自荐信
2013/11/21 职场文书
接待员岗位职责
2015/02/13 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
竞聘书的秘诀
2019/04/02 职场文书
java设计模式--原型模式详解
2021/07/21 Java/Android