JS 实现导航栏悬停效果


Posted in Javascript onSeptember 23, 2013

JS-实现导航栏悬停

先布个局:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<head> 
<script type="text/javascript" src="test.js"></script> 
<link rel="stylesheet" type="text/css" href="test.css"></link> 
<title>Test</title> 
</head> 
<body> 
<div class="main"> 
<div class="content">1</div> 
<div id="nav" class="navigation"> 
<div class="tab">tab1</div> 
<div class="tab">tab2</div> 
<div class="tab">tab3</div> 
<div class="tab">tab4</div> 
</div> 
<div class="content">2</div> 
<div class="content">3</div> 
<div class="content">4</div> 
<div class="content">5</div> 
<div class="content">6</div> 
<div class="content">7</div> 
</div> 
</body> 
</html>

添加简单的样式:
div.main{ 
width: 800px; 
background: #CCC; 
margin: 10px auto 0; 
position: relative; 
} div.content{ 
width: 800px; 
height: 400px; 
background: yellow; 
margin: 10px auto 0; 
} 
div.navigation{ 
width: 800px; 
height: 40px; 
background: red; 
margin: 4px auto 0; 
top: 400px; 
left: 0px; 
position: absolute; 
} 
div.tab{ 
width: 195px; 
height: 40px; 
background: blue; 
float: left; 
margin-left: 5px; 
}

JS:
//记录导航条原来在页面上的位置 
var naviga_offsetTop = 0; //IE7不识别getElementsByClassName,为了兼容自定义一个 
function my_getElementsByClassName(class_name) { 
var el = []; 
//获取所有元素 
_el = document.getElementsByTagName('*'); 
//通过className刷选 
for (var i=0; i<_el.length; i++ ) { 
if (_el[i].className == class_name ) { 
el[el.length] = _el[i]; 
} 
} 
return el; 
} 
//导航条,悬停在顶部 
function naviga_stay_top(){ 
var a_navigation_bar = []; 
if(document.getElementsByClassName){//Chrome, FF 
a_navigation_bar = document.getElementsByClassName("navigation"); 
} else {//IE 
a_navigation_bar = my_getElementsByClassName("navigation"); 
} 
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; 
if( scrollTop > naviga_offsetTop){ 
a_navigation_bar[0].style.top = scrollTop + "px"; 
} else { 
a_navigation_bar[0].style.top = naviga_offsetTop + "px"; 
} 
} 

//给导航条上四个tab,加上点击事件。 
window.onload=function(){ 
var a_tabs = []; 
if( document.getElementsByClassName ){//Chrome, FF 
a_tabs = document.getElementsByClassName("tab"); 
}else{ //IE 
a_tabs = my_getElementsByClassName("tab"); 
} 
var a_contents = []; 
if( document.getElementsByClassName ){//Chrome, FF 
a_contents = document.getElementsByClassName("content"); 
}else{//IE 
a_contents = my_getElementsByClassName("content"); 
} 
a_tabs[0].onclick=function(){ 
window.scrollTo(0, a_contents[2].offsetTop); 
} 
a_tabs[1].onclick=function(){ 
window.scrollTo(0, a_contents[3].offsetTop); 
} 
a_tabs[2].onclick=function(){ 
window.scrollTo(0, a_contents[4].offsetTop); 
} 
a_tabs[3].onclick=function(){ 
window.scrollTo(0, a_contents[5].offsetTop); 
} 
//获取页面上,导航条到顶部的位置 
var a_navigation_bar = []; 
if(document.getElementsByClassName){//Chrome, FF 
a_navigation_bar = document.getElementsByClassName("navigation"); 
} else {//IE 
a_navigation_bar = my_getElementsByClassName("navigation"); 
} 
naviga_offsetTop = a_navigation_bar[0].offsetTop; 
//给滚动条以及鼠标加上滚动事件 
// window.onscroll= naviga_stay_top; 
// document.onmousewheel= naviga_stay_top; 
if( window.attachEvent) //IE 
{ 
window.attachEvent("onmousewheel", naviga_stay_top); 
window.attachEvent("onscroll", naviga_stay_top); 
document.attachEvent("onmousewheel", naviga_stay_top); 
document.attachEvent("onscroll", naviga_stay_top); 
} else {//Chrome ,FF 
window.addEventListener("mousewheel", naviga_stay_top,false); 
window.addEventListener("scroll", naviga_stay_top,false); 
document.addEventListener("mousewheel", naviga_stay_top,false); 
document.addEventListener("scroll", naviga_stay_top,false); 
} 
}

不知道什么原因,在IE上,滚动滚动条或者鼠标滚轮的时候,导航栏会抖动;而在Chrome和FF上有没有任何问题。还望高人指点。
Javascript 相关文章推荐
QQ邮箱的一个文本编辑器代码
Mar 14 Javascript
js中的window.open返回object的错误的解决方法
Aug 15 Javascript
分享10篇优秀的jQuery幻灯片制作教程及应用案例
Apr 16 Javascript
使用jquery解析XML的方法
Sep 05 Javascript
Spring mvc 接收json对象
Dec 10 Javascript
ReactNative-JS 调用原生方法实例代码
Oct 08 Javascript
BootStrap Validator对于隐藏域验证和程序赋值即时验证的问题浅析
Dec 01 Javascript
js实现数字递增特效【仿支付宝我的财富】
May 05 Javascript
使用node.js搭建服务器
May 20 Javascript
深入理解Node内建模块和对象
Mar 12 Javascript
Nest.js参数校验和自定义返回数据格式详解
Mar 29 Javascript
html5中sharedWorker实现多页面通信的示例代码
May 07 Javascript
jquery购物车实时结算特效实现思路
Sep 23 #Javascript
js下拉菜单语言选项简单实现
Sep 23 #Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
Sep 23 #Javascript
读取input:file的路径并显示本地图片的方法
Sep 23 #Javascript
js/html光标定位的实现代码
Sep 23 #Javascript
JS加jquery简单实现标签元素的显示或隐藏
Sep 23 #Javascript
JQuery操作单选按钮以及复选按钮示例
Sep 23 #Javascript
You might like
PHP安装全攻略:APACHE
2006/10/09 PHP
简单的过滤字符串中的HTML标记
2006/12/25 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
一段非常简单的让图片自动切换js代码
2006/11/10 Javascript
CSS常用网站布局实例
2008/04/03 Javascript
新鲜出炉的js tips提示效果
2011/04/03 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
Javascript中String的常用方法实例分析
2015/06/13 Javascript
浅谈javascript构造函数与实例化对象
2015/06/22 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
python+django快速实现文件上传
2016/10/24 Python
python中int与str互转方法
2018/07/02 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
Pandas数据分析的一些常用小技巧
2021/02/07 Python
日本订房网站,预订日本星级酒店/温泉旅馆:Relux(支持中文)
2020/01/03 全球购物
Sql面试题
2013/03/20 面试题
商场总经理岗位职责
2014/02/03 职场文书
产假请假条
2014/04/10 职场文书
考博专家推荐信
2014/05/10 职场文书
公司承诺书范文
2014/05/19 职场文书
2014年采购工作总结
2014/11/20 职场文书
信访维稳承诺书
2015/05/04 职场文书
职工宿舍管理制度
2015/08/05 职场文书
python基础之文件处理知识总结
2021/05/23 Python
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python