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 相关文章推荐
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
Jan 07 Javascript
js实现遮罩层划出效果是生成div而不是显示
Jul 29 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
Mar 03 Javascript
jquery实现焦点图片随机切换效果的方法
Mar 12 Javascript
JavaScript计算两个日期时间段内日期的方法
Mar 16 Javascript
jQuery实现Tab菜单滚动切换的方法
Sep 21 Javascript
简单理解Vue中的nextTick方法
Jan 30 Javascript
用Vue编写抽象组件的方法
May 06 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
Feb 21 Javascript
vue+elementUI 实现内容区域高度自适应的示例
Sep 26 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利用cookie实现访问次数统计代码
2011/05/19 PHP
AJAX的跨域访问-两种有效的解决方法介绍
2013/06/22 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
半角全角相互转换的js函数
2009/10/16 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
微信小程序 loading(加载中提示框)实例
2016/10/28 Javascript
jQuery EasyUI 组件加上“清除”功能实例详解
2017/04/11 jQuery
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
微信小程序实现图片上传
2019/05/23 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
简单介绍Python中的几种数据类型
2016/01/02 Python
对Python中的@classmethod用法详解
2018/04/21 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
python实现倒计时小工具
2019/07/29 Python
python实现图片压缩代码实例
2019/08/12 Python
python 输入字符串生成所有有效的IP地址(LeetCode 93号题)
2020/10/15 Python
荷兰包包购物网站:The Little Green Bag
2018/03/17 全球购物
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
2014年新生军训方案
2014/05/01 职场文书
求职信范文大全
2014/05/26 职场文书
学校会议通知范文
2015/04/15 职场文书
信息技术课教学反思
2016/02/23 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL