哪位高手能看懂这种鼠标悬停时动态翻滚的导航条的原理

wuxia2118 2009-11-11 04:03:51
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>《基于Web标准的网页设计》唐四薪编著 ISBN:978-7-302-21181-5 页数:16开428页 定价:38元 出版社:清华大学出版社 出版时间:2009年11月</title>
<style type="text/css">
.clear:after{content:"."; display:block; height:0; clear:both; visibility:hidden}.clear{display:inline-block}.clear{display:block}
div#nav{height:32px; background:url(http://www.eagexp.com/YLimage/YL29.jpg) repeat-x}
div#nav ul{
width:705px;
list-style:none;
margin-top: 0;
margin-right: auto;
margin-bottom: 0;
margin-left: 0px;
}
div#nav ul li{
float:left;
height:32px;
overflow:hidden;
background-image: url(http://www.eagexp.com/YLimage/YL30.jpg);
background-repeat: repeat-y;
background-position: right 0;
padding-top: 0;
padding-right: 1px;
padding-bottom: 0;
padding-left: 0px;
font-family: Arial;
font-size: 12px;
line-height: 32px;
font-weight: bold;
}
div#nav ul li a{
float:left;
height:100%;
width: 77px;
background:url(http://www.eagexp.com/YLimage/YL28.jpg) repeat-x;
color:#fff;
text-decoration:none;
padding-top: 0;
padding-right: 5px;
padding-bottom: 0;
padding-left: 5px;
text-align:center;
}
div#nav ul li a.hover{
clear:both;
background-position:0 -32px;
width: 77px;
}
div#nav ul li.on a{
background-position:0 -32px;
}
div#nav ul li.nobg{background:none}
/* ]]> */
</style>
</head>

<body>
<div id="nav">
<ul class="clear">
<li><a href="#">首页</a></li>
<li><a href="#">中心简介</a></li>
<li><a href="#">常用下载</a></li>
<li><a href="#">新闻中心</a></li>
<li><a href="#">服务支持</a></li>
<li><a href="#">政策法规</a></li>
<li><a href="#">故障报修</a></li>
<li><a href="#">网页教学</a></li>

<li class="nobg"><a href="#">联系我们</a></li>
</ul>
</div>
<script type="text/javascript">
/* <![CDATA[ */
function nav(c, config){
this.config = config || {speed: 10, num: 2};
this.container = (typeof(c)=="object") ? c : document.getElementById(c);
this.lineHeight = this.container.offsetHeight;
this.scrollTimeId = null;
var _this = this;

this.__construct = function (){
var inner,el,href;
inner = _this.container.childNodes[0].innerHTML;
href = _this.container.childNodes[0].href;
el = document.createElement("a");
el.innerHTML = inner;
el.href = href;
el.className = 'hover';
_this.container.appendChild(el);

//注册事件
_this.container.onmouseover = function (){_this.start()};
_this.container.onmouseout = function (){_this.end()};
}();

this.start = function (){
_this.clear();
_this.scrollTimeId = setTimeout(function(){_this.scrollUp();}, _this.config.speed);
};

this.end = function (){
_this.clear();
_this.scrollTimeId = setTimeout(function(){_this.scrollDown();}, _this.config.speed);
};

this.scrollUp = function (){
var c = _this.container;

if(c.scrollTop >= _this.lineHeight){c.scrollTop = _this.lineHeight;return;}
c.scrollTop += _this.config.num;
_this.scrollTimeId = setTimeout(function(){_this.scrollUp();}, _this.config.speed);
};

this.scrollDown = function (){
var c = _this.container;

if(c.scrollTop <= 0){c.scrollTop = 0;return;}
c.scrollTop -= _this.config.num;
_this.scrollTimeId = setTimeout(function(){_this.scrollDown();}, _this.config.speed);
};

this.clear = function (){clearTimeout(_this.scrollTimeId)};



}

(function(){
var container = document.getElementById('nav');
var el_li = container.getElementsByTagName('li');
var arr = [];
for( var i = 0; i < el_li.length; i++){
if(el_li[i].className == 'on') continue;
arr[i] = new nav(el_li[i], {speed: 10, num: 4});
}
})

();

/* ]]> */
</script>
http://ec.hynu.cn
</body>
</html>
谁能把这个效果的原理看懂吗,我觉得如果当鼠标悬停时让另一个元素显示,并慢慢滑动遮盖住底下的这个元素,倒是能实现这个效果,可关键是在这段代码的结构代码中只有一个a元素,显然不是通过用另外一个元素动态遮盖这个a元素实现的,不知它的原理怎么样
...全文
132 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxia2118 2009-11-12
  • 打赏
  • 举报
回复
嗯,确实是是它动态地创建了一个a元素,用这个a元素覆盖原来的a元素,谢谢楼上的提醒,这种测试方法挺好。
浪尖赏花 2009-11-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 wuxia2118 的回复:]
谁能把这个效果的原理看懂吗,我觉得如果当鼠标悬停时让另一个元素显示,并慢慢滑动遮盖住底下的这个元素,倒是能实现这个效果,可关键是在这段代码的结构代码中只有一个a元素,显然不是通过用另外一个元素动态遮盖这个a元素实现的,不知它的原理怎么样
[/Quote]
呵呵,LZ你想复杂了,其实就如你分析的一样

在JS的最后行加上
alert(document.body.outerHTML);
应该可以看出猫腻了吧^_^
内容概要:本文围绕“基于配电网韧性提升的应急移动电源预配置和动态调度”展开,重点介绍上半部分——应急移动电源(MPS)的预配置策略,采用Matlab代码实现,属于SCI一区论文的复现工作。研究旨在通过科学配置应急电源资源,提高配电网在突发事件下的供电恢复能力与系统韧性。文中结合优化算法对MPS的部署位置、容量和数量进行建模与求解,为后续动态调度奠定基础,具有较强的工程应用背景和学术价值。; 适合人群:电力系统、电气工程及其自动化等相关专业的研究生、科研人员及从事配电网规划与应急管理的技术人员,具备一定的优化建模与Matlab编程基础者更佳。; 使用场景及目标:① 复现高水平SCI论文中的MPS预配置模型,掌握配电网韧性评估与提升方法;② 学习应急电源优化配置的数学建模思路与Matlab实现技巧,支撑科研项目或实际工程应用。; 阅读建议:建议结合文中的Matlab代码逐段理解模型构建过程,重点关注目标函数与约束条件的设计逻辑,并配合“动态调度”下半部分内容进行系统性学习,以完整掌握MPS在配电网韧性提升中的全流程应用。【SCI一区复现】基于配电网韧性提升的应急移动电源预配置和动态调度(上)—MPS预配置(Matlab代码实现)

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧