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 相关文章推荐
jQuery如何取id有.的值一般的方法是取不到的
Apr 18 Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 Javascript
javascript Deferred和递归次数限制实例
Oct 21 Javascript
jQuery实现动画效果circle实例
Aug 06 Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 Javascript
详解springmvc 接收json对象的两种方式
Dec 06 Javascript
从零开始最小实现react服务器渲染详解
Jan 26 Javascript
JavaScript引用类型之基本包装类型实例分析【Boolean、Number和String】
Aug 09 Javascript
微信小程序登录数据解密及状态维持实例详解
May 06 Javascript
Vue Echarts实现可视化世界地图代码实例
May 07 Javascript
详解babel升级到7.X采坑总结
May 12 Javascript
vue keep-alive 动态删除组件缓存的例子
Nov 04 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
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
javascript YUI 读码日记之 YAHOO.util.Dom - Part.4
2008/03/22 Javascript
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
jquery 字符串切割函数substring的用法说明
2014/02/11 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
详解JS正则replace的使用方法
2016/03/06 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
angular中的cookie读写方法
2017/08/02 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
vue循环数组改变点击文字的颜色
2019/10/14 Javascript
微信小程序单选框自定义赋值
2020/05/26 Javascript
python使用电子邮件模块smtplib的方法
2016/08/28 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
python爬虫超时的处理的实例
2018/12/19 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
Python自定义聚合函数merge与transform区别详解
2020/05/26 Python
Pygame框架实现飞机大战
2020/08/07 Python
Europcar葡萄牙:葡萄牙汽车和货车租赁
2017/10/13 全球购物
优秀英语专业毕业生求职信
2013/11/23 职场文书
承诺书范文
2014/06/03 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python