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 定义初始化数组函数
Sep 07 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
Mar 14 Javascript
JS中eval函数的使用示例
Jul 21 Javascript
Vue.js第四天学习笔记(组件)
Dec 02 Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 Javascript
原生JS 购物车及购物页面的cookie使用方法
Aug 21 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
Nov 21 Javascript
JavaScript折半查找(二分查找)算法原理与实现方法示例
Aug 06 Javascript
jquery+css实现Tab栏切换的代码实例
May 14 jQuery
js 递归json树实现根据子id查父id的方法分析
Nov 08 Javascript
Vue 如何使用props、emit实现自定义双向绑定的实现
Jun 05 Javascript
vue3.0 上手体验
Sep 21 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
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
php统计数组元素个数的方法
2015/07/02 PHP
php抽象方法和抽象类实例分析
2016/12/07 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
jquery文本框中的事件应用以输入邮箱为例
2014/05/06 Javascript
使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
2014/06/05 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
2015/08/30 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
仿vue-cli搭建属于自己的脚手架的方法步骤
2019/04/17 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
django解决跨域请求的问题详解
2019/01/20 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
Python实现时间序列可视化的方法
2019/08/06 Python
QML使用Python的函数过程解析
2019/09/26 Python
pygame实现贪吃蛇游戏(上)
2019/10/29 Python
手术室护士自我鉴定
2013/10/14 职场文书
商务英语求职自荐信范文
2013/12/24 职场文书
教学大赛获奖感言
2014/01/15 职场文书
产品设计开发计划书
2014/05/07 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技