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 模式对话框终极版实现代码
Sep 28 Javascript
HTML上传控件取消选择
Mar 06 Javascript
document.documentElement的一些使用技巧
Apr 18 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
Apr 26 Javascript
Javascript获取当前日期的农历日期代码
Oct 08 Javascript
JS给超链接加确认对话框的方法
Feb 24 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
May 03 Javascript
详解JavaScript时间格式化
Dec 23 Javascript
JavaScript设计模式初探
Jan 07 Javascript
分析js闭包引起的事件注册问题
Mar 29 Javascript
10分钟彻底搞懂Http的强制缓存和协商缓存(小结)
Aug 30 Javascript
小程序实现搜索框
Jun 19 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仿QQ验证码的实例分析
2013/07/01 PHP
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
php图片水印添加、压缩、剪切的封装类实现
2020/04/18 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
Javascript的闭包
2009/12/31 Javascript
JavaScript中的闭包原理分析
2010/03/08 Javascript
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
vue轮播组件实现$children和$parent 附带好用的gif录制工具
2019/09/26 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
Python中用于检查英文字母大写的isupper()方法
2015/05/19 Python
Python数组定义方法
2016/04/13 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
解决Django no such table: django_session的问题
2020/04/07 Python
Java中实现多态的机制是什么?
2014/12/07 面试题
党员公开承诺事项
2014/03/25 职场文书
社区食品安全实施方案
2014/03/28 职场文书
《穷人》教学反思
2014/04/08 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
求职信内容怎么写
2014/05/26 职场文书
商业计划书之服装
2019/09/09 职场文书
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers
python实现学员管理系统(面向对象版)
2022/06/05 Python
分享几个实用的CSS代码块
2022/06/10 HTML / CSS