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 相关文章推荐
对xmlHttp对象的理解
Jan 17 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
May 23 Javascript
js判断浏览器类型为ie6时不执行
Jun 15 Javascript
jquery.serialize() 函数语法及简单实例
Jul 08 Javascript
node.js实现回调的方法示例
Mar 01 Javascript
AngularJS双向绑定和依赖反转实例详解
Apr 15 Javascript
JavaScript设计模式之单例模式详解
Jun 09 Javascript
js动态引入的四种方法
May 05 Javascript
vue打包使用Nginx代理解决跨域问题
Aug 27 Javascript
js字符串倒序的实例代码
Nov 30 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
Jan 22 Javascript
vue 判断页面是首次进入还是再次刷新的实例
Nov 05 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 empty函数 使用说明
2009/08/10 PHP
学习php分页代码实例
2013/10/24 PHP
php实现文件上传基本验证
2020/03/04 PHP
JavaScript null和undefined区别分析
2009/10/14 Javascript
firefox插件Firebug的使用教程
2010/01/02 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
IE中鼠标经过option触发mouseout的解决方法
2015/01/29 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
JavaScript实现时间倒计时跳转(推荐)
2016/06/28 Javascript
Angularjs 自定义服务的三种方式(推荐)
2016/08/02 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
EL表达式截取字符串的函数说明
2017/09/22 Javascript
React Native AsyncStorage本地存储工具类
2017/10/24 Javascript
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
[01:52]DOTA2完美大师赛Vega战队趣味视频——kpii老师小课堂
2017/11/25 DOTA
python调用cmd命令行制作刷博器
2014/01/13 Python
python批量提取word内信息
2015/08/09 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
python队列原理及实现方法示例
2019/11/27 Python
python实现视频读取和转化图片
2019/12/10 Python
python统计文章中单词出现次数实例
2020/02/27 Python
Python项目跨域问题解决方案
2020/06/22 Python
获取python运行输出的数据并解析存为dataFrame实例
2020/07/07 Python
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
英语专业应届生求职信范文
2013/11/15 职场文书
特色蛋糕店创业计划书
2014/01/28 职场文书
税务会计岗位职责
2014/02/18 职场文书
教师培训学习心得体会
2016/01/21 职场文书
千万级用户系统SQL调优实战分享
2022/03/03 MySQL