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 ajax 检测用户注册时用户名是否存在
Nov 03 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
Feb 14 Javascript
js判断是否按下了Shift键的方法
Jan 27 Javascript
简单实现的JQuery文本框水印插件
Jun 14 Javascript
JSON 必知必会 观后记
Oct 27 Javascript
jQuery实现的浮动层div浏览器居中显示效果
Feb 03 Javascript
javascript 的变量、作用域和内存问题
Apr 19 Javascript
Vue+Express实现登录注销功能的实例代码
May 05 Javascript
微信小程序上传文件到阿里OSS教程
May 20 Javascript
node中使用log4js4.x版本记录日志的方法
Aug 20 Javascript
vue3修改link标签默认icon无效问题详解
Oct 09 Javascript
vue使用wavesurfer.js解决音频可视化播放问题
Apr 04 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
php面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
PHP中将数组转成XML格式的实现代码
2011/08/08 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
2016/09/23 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
JavaScript 对话框和状态栏使用说明
2009/10/25 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
AngularJS入门教程之Hello World!
2014/12/06 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
简单理解Vue条件渲染
2016/12/03 Javascript
jquery select2的使用心得(推荐)
2016/12/04 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
webpack4 入门最简单的例子介绍
2018/09/05 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
js实现录音上传功能
2019/11/22 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
vue点击Dashboard不同内容 跳转到同一表格的实例
2020/11/13 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
python中比较两个列表的实例方法
2019/07/04 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
python实现宿舍管理系统
2019/11/22 Python
《独坐敬亭山》教学反思
2014/04/08 职场文书
共筑中国梦演讲稿
2014/04/23 职场文书
环保倡议书怎么写
2014/05/16 职场文书
学习雷锋月活动总结
2014/07/03 职场文书
学习优秀共产党员先进事迹思想报告
2014/09/17 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
企业员工辞职信范文
2015/05/12 职场文书
熟背这些句子,让您的英语口语突飞猛进(135句)
2019/09/06 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript
Redis特殊数据类型bitmap位图
2022/06/01 Redis