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 相关文章推荐
从零开始学习jQuery (八) 插播:jQuery实施方案
Feb 23 Javascript
表单切换,用回车键替换Tab健(不支持IE)
Jul 20 Javascript
使用UglifyJS合并/压缩JavaScript的方法
Mar 07 Javascript
jQuery侧边栏随窗口滚动实现方法
Mar 04 Javascript
node.js中的console.assert方法使用说明
Dec 10 Javascript
jquery.validate使用详解
Jun 02 Javascript
BootStrap中Datepicker控件带中文的js文件
Aug 10 Javascript
深入浅析Vue组件开发
Nov 25 Javascript
深入理解基于vue-cli的vuex配置
Jul 24 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 Javascript
Node.js 多进程处理CPU密集任务的实现
May 26 Javascript
简单实现节流函数和防抖函数过程解析
Oct 08 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同时支持GIF、png、JPEG
2006/10/09 PHP
浅析PHP7新功能及语法变化总结
2016/06/17 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
jquery 锁定弹出层实现代码
2010/02/23 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
浅析VUE防抖与节流
2020/11/24 Vue.js
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
python实现的阳历转阴历(农历)算法
2014/04/25 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
python中selenium库的基本使用详解
2020/07/31 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
python list的index()和find()的实现
2020/11/16 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
在加拿大在线租赁和购买电子游戏:Game Access
2019/09/02 全球购物
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
打架检讨书2000字
2014/02/22 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
社团个人总结范文
2015/03/05 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
Spring Boot 启动、停止、重启、状态脚本
2021/06/26 Java/Android
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android
angular异步验证器防抖实例详解
2022/03/31 Javascript
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python