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 相关文章推荐
Extjs学习过程中新手容易碰到的低级错误积累
Feb 11 Javascript
javascript创建和存储cookie示例
Jan 07 Javascript
JavaScript设计模式之适配器模式介绍
Dec 28 Javascript
DOM基础教程之模型中的模型节点
Jan 19 Javascript
详解JavaScript中的事件流和事件处理程序
May 20 Javascript
Node.js 数据加密传输浅析
Nov 16 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
JS作用域深度解析
Dec 29 Javascript
js获取地址栏中传递的参数(两种方法)
Feb 08 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
Jul 15 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
Apr 17 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
Jan 22 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
关于时间计算的结总
2006/12/06 PHP
php unset全局变量运用问题的深入解析
2013/06/17 PHP
php遍历文件夹所有文件子文件夹函数代码
2013/11/27 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
PHP后期静态绑定实例浅析
2018/12/21 PHP
通用JS事件写法实现代码
2009/01/07 Javascript
javascript数组的使用
2013/03/28 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
JS对字符串编码的几种方式使用指南
2015/05/14 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
vue select组件的使用与禁用实现代码
2018/04/10 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
2018/05/22 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
详解python时间模块中的datetime模块
2016/01/13 Python
基于Python中numpy数组的合并实例讲解
2018/04/04 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
2019/04/11 Python
Python Pandas 如何shuffle(打乱)数据
2019/07/30 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
JINS眼镜官方网站:日本最大的眼镜邮购
2016/10/14 全球购物
德国高性价比网上药店:medpex
2017/07/09 全球购物
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
自我鉴定思想方面
2013/10/07 职场文书
职务聘任书范文
2014/03/29 职场文书
2016特色励志班级口号
2015/12/24 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
Redis如何实现分布式锁
2021/08/23 Redis
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技