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 相关文章推荐
Javascript图像处理思路及实现代码
Dec 25 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
Aug 12 Javascript
jquery简单实现幻灯片的方法
Aug 03 Javascript
jQuery UI Bootstrap是什么?
Jun 17 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
Jan 20 Javascript
jquery滚动条插件slimScroll使用方法
Feb 09 Javascript
bootstrap table表格客户端分页实例
Aug 07 Javascript
值得收藏的vuejs安装教程
Nov 21 Javascript
vue2.x+webpack快速搭建前端项目框架详解
Nov 30 Javascript
基于vue cli 通过命令行传参实现多环境配置
Jul 12 Javascript
在vue 中使用 less的教程详解
Sep 26 Javascript
js实现石头剪刀布游戏
Oct 11 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扩展函数
2006/10/09 PHP
优化PHP程序的方法小结
2012/02/23 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
自己写了一个php检测文件编码的函数
2014/04/21 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
来自国外的30个基于jquery的Web下拉菜单
2012/06/22 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
深入document.write()与HTML4.01的非成对标签的详解
2013/05/08 Javascript
jQuery简单操作cookie的插件实例
2016/01/13 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
ES6新特性四:变量的解构赋值实例
2017/04/21 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
Champion澳大利亚官网:美国冠军运动服装
2018/05/07 全球购物
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
可靠的数据流传输TCP
2016/03/15 面试题
市场营销专业毕业生求职信
2014/03/26 职场文书
房产公证书范本
2014/04/10 职场文书
大学生求职信例文
2014/06/29 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
秋冬农业生产标语
2014/10/09 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
出国导师推荐信
2015/03/25 职场文书
vue实现移动端div拖动效果
2022/03/03 Vue.js