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 相关文章推荐
控制打印时页眉角的代码
Feb 08 Javascript
转换json格式的日期为Javascript对象的函数
Jul 13 Javascript
JavaScript中的方法重载实例
Mar 16 Javascript
jQuery实现自定义checkbox和radio样式
Jul 13 Javascript
jquery实现的V字形显示效果代码
Oct 27 Javascript
谈一谈js中的执行环境及作用域
Mar 30 Javascript
jQuery 插件封装的方法
Nov 16 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
Jun 07 Javascript
webpack将js打包后的map文件详解
Feb 22 Javascript
微信小程序Echarts覆盖正常组件问题解决
Jul 13 Javascript
JS操作字符串转数字的常见方法示例
Oct 29 Javascript
ES11屡试不爽的新特性,你用上了几个
Oct 21 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
CodeIgniter基本配置详细介绍
2013/11/12 PHP
php中Session的生成机制、回收机制和存储机制探究
2014/08/19 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
yii2简单使用less代替css示例
2017/03/10 PHP
php无限级分类实现评论及回复功能
2019/02/18 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
删除重复数据的算法
2006/11/23 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
JS判断字符串包含的方法
2015/05/05 Javascript
在JavaScript中操作时间之getUTCDate()方法的使用
2015/06/10 Javascript
纯JavaScript代码实现文本比较工具
2016/02/17 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
angular实现商品筛选功能
2017/02/01 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
React 组件转 Vue 组件的命令写法
2018/02/28 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
[03:30]DOTA2完美“圣”典精彩集锦
2016/12/27 DOTA
Python urlopen 使用小示例
2008/09/06 Python
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
Python实现基本线性数据结构
2016/08/22 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
python-str,list,set间的转换实例
2018/06/27 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
Python实现DDos攻击实例详解
2019/02/02 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
新闻学毕业生自荐信
2013/11/15 职场文书
实习老师离校感言
2014/02/03 职场文书
会议欢迎词
2015/01/23 职场文书
AJAX引擎原理以及XmlHttpRequest对象的axios、fetch区别详解
2022/04/09 Javascript
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL