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 textarea光标定位方法(兼容IE和FF)
Mar 12 Javascript
javascript学习笔记(十) js对象 继承
Jun 19 Javascript
深入理解逻辑表达式的用法 与或非的用法
Jun 06 Javascript
AngularJS下对数组的对比分析
Aug 24 Javascript
jQuery组件easyui基本布局实现代码
Aug 25 Javascript
基于JavaScript实现的折半查找算法示例
Apr 14 Javascript
nuxt+axios解决前后端分离SSR的示例代码
Oct 24 Javascript
使用Vue自定义数字键盘组件(体验度极好)
Dec 19 Javascript
JavaScript设计模式之调停者模式实例详解
Feb 03 Javascript
React中this丢失的四种解决方法
Mar 12 Javascript
javascript操作元素的常见方法小结
Nov 13 Javascript
echarts实现晶体球面投影的实例教程
Oct 10 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
3.从实例开始
2006/10/09 PHP
php下使用以下代码连接并测试
2008/04/09 PHP
PHP新手NOTICE错误常见解决方法
2011/12/07 PHP
php微信公众号开发(3)php实现简单微信文本通讯
2016/12/15 PHP
PHP + plupload.js实现多图上传并显示进度条加删除实例代码
2017/03/06 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP生成二维码与识别二维码的方法详解【附源码下载】
2019/03/07 PHP
ThinkPHP框架实现FTP图片上传功能示例
2019/04/08 PHP
asp 的 分词实现代码
2007/05/24 Javascript
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
JavaScript将相对地址转换为绝对地址示例代码
2013/07/19 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
微信小程序实现YDUI的ScrollNav组件
2018/02/02 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
vue 路由守卫(导航守卫)及其具体使用
2020/02/25 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
Python显示进度条的方法
2014/09/20 Python
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
canvas简易绘图的实现(海绵宝宝篇)
2018/07/04 HTML / CSS
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
运动会通讯稿50字
2014/01/30 职场文书
2014年护士长工作总结
2014/11/11 职场文书
海上钢琴师观后感
2015/06/03 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
Python数据处理的三个实用技巧分享
2022/04/01 Python
Python OpenGL基本配置方式
2022/05/20 Python