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 相关文章推荐
基于jquery的关于动态创建DOM元素的问题
Dec 24 Javascript
jQuery操作Select的Option上下移动及移除添加等等
Nov 18 Javascript
node.js学习总结之调式代码的方法
Jun 25 Javascript
流量统计器如何鉴别C#:WebBrowser中伪造referer
Jan 07 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
Jul 03 Javascript
jQuery实现的表头固定效果实例【附完整demo源码下载】
Aug 01 Javascript
超实用的javascript时间处理总结
Aug 16 Javascript
js实现文字列表无缝滚动效果
Jun 23 Javascript
浅谈原型对象的常用开发模式
Jul 22 Javascript
Java设计中的Builder模式的介绍
Mar 22 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
Aug 30 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
Dec 18 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获取谷歌PR值算法,附上php查询PR值代码示例
2011/12/25 PHP
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
php删除文本文件中重复行的方法
2015/04/28 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
Eclipse引入jquery报错如何解决
2015/12/01 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
javascript编写简易计算器
2017/05/06 Javascript
javascript 初学教程及五子棋小程序的简单实现
2017/07/04 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
详解Python中的join()函数的用法
2015/04/07 Python
Python抓取框架Scrapy爬虫入门:页面提取
2017/12/01 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
Python处理CSV与List的转换方法
2018/04/19 Python
Flask框架URL管理操作示例【基于@app.route】
2018/07/23 Python
Python使用matplotlib绘制随机漫步图
2018/08/27 Python
python字典一键多值实例代码分享
2019/06/14 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
python实现每天自动签到领积分的示例代码
2020/08/18 Python
利用Python实现最小二乘法与梯度下降算法
2021/02/21 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
波兰数码相机及配件网上商店: Cyfrowe.pl
2017/06/19 全球购物
皇家道尔顿官网:Royal Doulton
2017/12/06 全球购物
西班牙最好的在线购买葡萄酒的商店:Vinoseleccion
2019/10/30 全球购物
升学宴演讲稿
2014/09/01 职场文书
出国签证在职证明范本
2014/11/24 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书
pytorch fine-tune 预训练的模型操作
2021/06/03 Python
Vue实现跑马灯样式文字横向滚动
2021/11/23 Vue.js