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 相关文章推荐
编辑浪子版表单验证类
May 12 Javascript
JavaScript判断访问的来源是手机还是电脑,用的哪种浏览器
Dec 12 Javascript
jquery获得keycode的示例代码
Dec 30 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
Oct 17 Javascript
javascript实现的图片切割多块效果实例
May 07 Javascript
AngularJS实现表单手动验证和表单自动验证
Dec 09 Javascript
JS实现JSON.stringify的实例代码讲解
Feb 07 Javascript
基于JavaScript实现飘落星星特效
Aug 10 Javascript
原生JS 购物车及购物页面的cookie使用方法
Aug 21 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
Nov 22 Javascript
JS实现利用两个队列表示一个栈的方法
Dec 13 Javascript
JavaScript实现公告栏上下滚动效果
Mar 13 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
短波的认识
2021/03/01 无线电
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
2012/09/07 PHP
微信公众平台之快递查询功能用法实例
2015/04/14 PHP
php为字符串前后添加指定数量字符的方法
2015/05/04 PHP
PHP sleep()函数, usleep()函数
2016/08/25 PHP
PHP导出带样式的Excel示例代码
2016/08/28 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
php实现的生成排列算法示例
2019/07/25 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
比较详细的关于javascript中void(0)的具体含义解释
2007/08/02 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
jQuery使用技巧简单汇总
2013/04/18 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
Angularjs全局变量被作用域监听的正确姿势
2016/02/06 Javascript
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
2016/08/06 Javascript
简单谈谈Vue 模板各类数据绑定
2016/09/25 Javascript
vuejs事件中心管理组件间的通信详解
2017/08/09 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
iview form清除校验状态的实现
2019/09/19 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
2020/09/16 Javascript
Python中字典的setdefault()方法教程
2017/02/07 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
Python ATM功能实现代码实例
2020/03/19 Python
美国宠物商店:Wag.com
2016/10/25 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
数字天堂软件测试面试题
2012/12/23 面试题
护理学专业推荐信
2013/12/03 职场文书
四群教育工作实施方案
2014/03/26 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
教师节横幅标语
2014/10/08 职场文书