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 相关文章推荐
如何在标题栏显示框架内页面的标题
Feb 03 Javascript
jquery easyui的tabs使用时的问题
Mar 23 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
Jul 26 Javascript
JQGrid的用法解析(列编辑,添加行,删除行)
Nov 08 Javascript
JS不能跨域借助jquery获取IP地址的方法
Aug 20 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
Nov 24 Javascript
js实时获取并显示当前时间的方法
Jul 31 Javascript
Kindeditor在线文本编辑器如何过滤HTML
Apr 14 Javascript
js流动式效果显示当前系统时间
May 16 Javascript
JQuery解析XML数据的几个简单实例
May 18 Javascript
详解基于Bootstrap+angular的一个豆瓣电影app
Jun 26 Javascript
Vue 根据条件判断van-tab的显示方式
Aug 03 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
无线电广播的开始
2002/01/30 无线电
自己做矿石收音机
2021/03/02 无线电
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
php中var_export与var_dump的区别分析
2010/08/21 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
PHP实现二维数组按某列进行排序的方法
2016/11/18 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
window.showModalDialog参数传递中含有特殊字符的处理方法
2013/06/06 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
Vue在H5 项目中使用融云进行实时个人单聊通讯
2020/12/14 Vue.js
python基础教程之序列详解
2014/08/29 Python
python列表list保留顺序去重的实例
2018/12/14 Python
pycharm配置当鼠标悬停时快速提示方法参数
2019/07/31 Python
python图形开发GUI库pyqt5的基本使用方法详解
2020/02/14 Python
python实现手势识别的示例(入门)
2020/04/15 Python
Python LMDB库的使用示例
2021/02/14 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
红旗方阵解说词
2014/02/12 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
解决ObjectMapper.convertValue() 遇到的一些问题
2021/06/30 Java/Android