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 相关文章推荐
extjs 学习笔记(三) 最基本的grid
Oct 15 Javascript
javascript 45种缓动效果 非常酷
Jun 28 Javascript
jQuery中clearQueue()方法用法实例
Dec 29 Javascript
Windows系统下Node.js的简单入门教程
Jun 23 Javascript
理解javascript对象继承
Apr 17 Javascript
Javascript将数值转换为金额格式(分隔千分位和自动增加小数点)
Jun 22 Javascript
浅谈Javascript中的Label语句
Dec 14 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
使用Vue-Router 2实现路由功能实例详解
Nov 14 Javascript
微信小程序支付PHP代码
Aug 23 Javascript
详解Vue-Router源码分析路由实现原理
May 15 Javascript
layui表单提交到后台自动封装到实体类的方法
Sep 12 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 $_SERVER详解
2009/01/16 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
php unlink()函数使用教程
2018/07/12 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
2018/08/21 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
js获取select默认选中的Option并不是当前选中值
2014/05/07 Javascript
jQuery使用contains过滤器实现精确匹配方法详解
2016/02/25 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
JavaScript数据结构之单链表和循环链表
2017/11/28 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
ES6 Generator函数的应用实例分析
2019/06/26 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
Python如何把十进制数转换成ip地址
2020/05/25 Python
基于css3实现漂亮便签样式
2013/03/18 HTML / CSS
4s店机修工岗位职责
2013/12/20 职场文书
财务主管的岗位职责
2013/12/30 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
《充气雨衣》教学反思
2014/04/07 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
导游词之张家口
2019/12/13 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python