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 相关文章推荐
Javascript 阻止javascript事件冒泡,获取控件ID值
Jun 27 Javascript
Raphael带文本标签可拖动的图形实现代码
Feb 20 Javascript
jQuery提交多个表单的小例子
Jun 30 Javascript
将查询条件的input、select清空
Jan 14 Javascript
AngularJS 使用$sce控制代码安全检查
Jan 05 Javascript
jquery实现无刷新验证码的简单实例
May 19 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
Sep 06 Javascript
Angular2库初探
Mar 01 Javascript
jQuery表格(Table)基本操作实例分析
Mar 10 Javascript
妙用Angularjs实现表格按指定列排序
Jun 23 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
Sep 12 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
Aug 09 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文件上传、下载和删除示例
2020/08/28 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
跨域请求的完美解决方法(JSONP, CORS)
2016/06/12 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
jQuery 获取select选中值及清除选中状态
2016/12/13 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
2018/11/30 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
vue中在vuex的actions中请求数据实例
2019/11/08 Javascript
JavaScript之Blob对象类型的具体使用方法
2019/11/29 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
python实现逆波兰计算表达式实例详解
2015/05/06 Python
python如何获取服务器硬件信息
2017/05/11 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
"序列点" 是什么
2016/07/29 面试题
Unix如何添加新的用户
2014/08/20 面试题
教师找工作推荐信
2013/11/23 职场文书
入党自我评价范文
2014/02/02 职场文书
会计个人实习计划书
2014/08/15 职场文书
师德师风建设整改措施思想汇报
2014/10/11 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
幼师中班个人总结
2015/02/12 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
运动会主持人开幕词
2016/03/04 职场文书
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python