JS 实现导航栏悬停效果(续2)


Posted in Javascript onSeptember 24, 2013

【JS-实现导航栏悬停】
【JS-实现导航栏悬停(续)】

用Jquery重新写完这个页面之后,发现原来的方法还有是有几个问题:

1.首先Js代码冗余,导航条上的Tab是用js实现跳转而不是超链接;

2.还有导航条本身用fixed定位,但没有被设置为水平居中,而是在JS中更改left值使其居中。

问题2就导致了,当浏览器窗口尺寸发生变化的时候,浏览器中的div的位置都发生了变化,也就导致了没法通过页面中的div动态的给已fixed定位的导航条来定位。

最终的代码更改如下:

test.html

<!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="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script> 
<script type="text/javascript" src="test.js"></script> 
<link rel="stylesheet" type="text/css" href="test.css"></link> 
<title>Test</title> 
</head> 
<body> 
<div id="main_div" class="main"> 
<div id="content_div1" class="content">1</div> 
<div id="nav" class="navigation"> 
<a href="#content_div3"><div id="tab_div1" class="tab">tab1</div></a> 
<a href="#content_div4"><div id="tab_div2" class="tab">tab2</div></a> 
<a href="#content_div5"><div id="tab_div3" class="tab">tab3</div></a> 
<a href="#content_div6"><div id="tab_div4" class="tab">tab4</div></a> 
</div> 
<div id="content_div2" class="content">2</div> 
<div id="content_div3" class="content">3</div> 
<div id="content_div4" class="content">4</div> 
<div id="content_div5" class="content">5</div> 
<div id="content_div6" class="content">6</div> 
<div id="content_div7" class="content">7</div> 
</div> 
</body> 
</html>

test.js
//记录导航条原来在页面上的位置 
var naviga_offsetTop = 0; //使导航条,悬停在顶部 
function naviga_stay_top(){ 
//获取滚动距离 
var scrollTop = $(document).scrollTop(); 
//如果向下滚动的距离大于原来导航栏离顶部的距离 
//直接将导航栏固定到可视区顶部 
if( scrollTop > naviga_offsetTop ){ 
$("#nav").css({"top": "0px"}); 
} else { 
//如果向下滚动的距离小原来导航栏离顶部的距离,则重新计算导航栏的位置 
$("#nav").css({"top": naviga_offsetTop - scrollTop + "px"}); 
} 
} 
function onload_function(){ 
//记录初始状态导航栏的高度 
naviga_offsetTop = $("#nav").attr("offsetTop"); 
//绑定滚动和鼠标事件 
$(window).bind("scroll", naviga_stay_top); 
$(window).bind("mousewheel",naviga_stay_top); 
$(document).bind("scroll", naviga_stay_top); 
$(document).bind("mousewheel",naviga_stay_top); 
} 
$(document).ready( onload_function );

test.css:注意navigation类的样式
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: 0 auto; 
top: 400px; 
left:50%; 
position: fixed; 
margin-left:-400px; 
} 
div.tab{ 
width: 195px; 
height: 40px; 
background: blue; 
float: left; 
margin-left: 5px; 
}

总结:

出现这个问题的原因还是CSS的布局定位不熟悉。

在这里没法通过:margin 0 auto;来设置导航条div水平居中,因为fixed定位的元素没法通过这种方式来定位。

通过margin 0 auto;来定位的元素不能为fixed定位,并且其父元素必须要有固定的宽度。

那么怎么使fixed定位的元素水平居中呢?

通过:left: 50%,将该元素的最左边与父元素宽的中点对其,然后通过marg-left: [该元素宽度的1/2]px;来将这个元素向左移动它的宽度的一般,从而使这个元素居中。

Javascript 相关文章推荐
在网页里看flash的trace数据的js类
Jan 10 Javascript
JavaScript中使用ActiveXObject操作本地文件夹的方法
Mar 28 Javascript
JS实现点击按钮自动增加一个单元格的方法
Mar 09 Javascript
Javascript中的方法链(Method Chaining)介绍
Mar 15 Javascript
Bootstrap每天必学之基础排版
Nov 20 Javascript
javascript实现倒计时跳转页面
Jan 17 Javascript
jquery购物车结算功能实现方法
Oct 29 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
Jan 04 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
Jan 13 Javascript
vue数据双向绑定的注意点
Jun 23 Javascript
深入理解Vuex 模块化(module)
Sep 26 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
Jul 31 Javascript
JS 实现导航栏悬停效果(续)
Sep 24 #Javascript
CSS+jQuery实现的一个放大缩小动画效果
Sep 24 #Javascript
JavaScript中访问节点对象的方法有哪些如何使用
Sep 24 #Javascript
基于jquery实现的省市区级联无ajax
Sep 24 #Javascript
JS.elementGetStyle(element, style)应用示例
Sep 24 #Javascript
jquery $.each()使用探讨
Sep 23 #Javascript
jQuery ajax dataType值为text json探索分享
Sep 23 #Javascript
You might like
php PDO中文乱码解决办法
2009/07/20 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
2011/10/09 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
用于deeplink的js方法(判断手机是否安装app)
2014/04/02 Javascript
js判断鼠标左、中、右键哪个被点击的方法
2015/01/27 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
深入分析jQuery的ready函数是如何工作的(工作原理)
2015/12/17 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
2016/06/08 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
JS实现提交表单前的数字及邮箱校检功能
2017/11/13 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
基于Vue实现微前端的示例代码
2020/04/24 Javascript
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
打包发布Python模块的方法详解
2016/09/18 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
机器学习10大经典算法详解
2017/12/07 Python
python 类对象和实例对象动态添加方法(分享)
2017/12/31 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
Python 一行代码能实现丧心病狂的功能
2020/01/18 Python
python使用布隆过滤器的实现示例
2020/08/20 Python
java关于string最常出现的面试题整理
2021/01/18 Python
2014财务人员自我评价范文
2014/09/21 职场文书
公司证明怎么写
2014/09/22 职场文书
收银员岗位职责
2015/02/03 职场文书
世界文化遗产导游词
2019/08/07 职场文书
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js
Go语言安装并操作redis的go-redis库
2022/04/14 Golang
python解析照片拍摄时间进行图片整理
2022/07/23 Python