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 相关文章推荐
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 Javascript
js实现iPhone界面风格的单选框和复选框按钮实例
Aug 18 Javascript
javascript伸缩型菜单实现代码
Nov 16 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
May 12 Javascript
Jquery鼠标放上去显示全名的实现方法
Feb 06 Javascript
利用pm2部署多个node.js项目的配置教程
Oct 22 Javascript
纯JS实现的读取excel文件内容功能示例【支持所有浏览器】
Jun 23 Javascript
element-ui中的select下拉列表设置默认值方法
Aug 24 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
Vue渲染过程浅析
Mar 14 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
Oct 24 Javascript
帮你提高开发效率的JavaScript20个技巧
Jun 18 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
中东人咖啡哲学
2021/03/03 咖啡文化
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
thinkphp查询,3.X 5.0方法(亲试可行)
2017/06/17 PHP
ExtJs使用总结(非常详细)
2012/03/22 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
js中array的sort()方法使用介绍
2014/02/20 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
jquery实现输入框实时输入触发事件代码
2016/12/21 Javascript
JavaScript函数节流的两种写法
2017/04/07 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
Js逆向实现滑动验证码图片还原的示例代码
2020/03/10 Javascript
jQuery实现颜色打字机的完整代码
2020/03/19 jQuery
小程序开发之模态框组件封装
2020/04/23 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
JavaScript通如何过RGraph实现动态仪表盘
2020/10/15 Javascript
python实现网页链接提取的方法分享
2014/02/25 Python
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
玩转python爬虫之正则表达式
2016/02/17 Python
python 异步async库的使用说明
2020/05/04 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
用python进行视频剪辑
2020/11/02 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
HTML5 Canvas如何实现纹理填充与描边(Fill And Stroke)
2013/07/15 HTML / CSS
Pure Collection美国官网:来自英国羊绒专家的奢华羊绒
2017/11/19 全球购物
美国隐形眼镜网上商店:Lens.com
2019/09/03 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
房地产销售计划书
2014/01/10 职场文书
跳槽求职信范文
2014/05/26 职场文书
倡议书格式
2014/08/30 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
pandas求平均数和中位数的方法实例
2021/08/04 Python