jquery实现的让超出显示范围外的导航自动固定屏幕最顶上


Posted in Javascript onSeptember 22, 2011

其实实现起来并不难,我们先把实现流程大致想一下,首先,如果导航在显示范围内,就不用做修改。当导航超出显示范围,也就是导航距离屏幕顶部的距离小于0的时候,我们要让它浮动在屏幕顶上,然后大于0的时候,进行一个复原操作,原理就是这么简单,大致看下效果图吧
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上

$().ready(function(){ 
//导航距离屏幕顶部距离 
var _defautlTop = $("#navigator").offset().top - $(window).scrollTop(); 
//导航距离屏幕左侧距离 
var _defautlLeft = $("#navigator").offset().left - $(window).scrollLeft(); 
//导航默认样式记录,还原初始样式时候需要 
var _position = $("#navigator").css('position'); 
var _top = $("#navigator").css('top'); 
var _left = $("#navigator").css('left'); 
var _zIndex = $("#navigator").css('z-index'); 
//鼠标滚动事件 
$(window).scroll(function(){ 
if($(this).scrollTop() > _defautlTop){ 
//IE6不认识position:fixed,单独用position:absolute模拟 
if($.browser.msie && $.browser.version=="6.0"){ 
$("#top").css({'position':'absolute','top':eval(document.documentElement.scrollTop),'left':_defautlLeft,'z-index':99999}); 
//防止出现抖动 
$("html,body").css({'background-image':'url(about:blank)','background-attachment':'fixed'}); 
}else{ 
$("#navigator").css({'position':'fixed','top':0,'left':_defautlLeft,'z-index':99999}); 
} 
}else{ 
$("#navigator").css({'position':_position,'top':_top,'left':_left,'z-index':_zIndex}); 
} 
}); 
});

没有太多好讲的,需要注意的一点就是,IE6不认识position:fixed,需要用position:absolute去模拟,然后实时计算出top的值,另外需要给html和body加两个样式,防止滚动的时候出现抖动,具体可以了解《完美解决IE6不支持position:fixed的bug》。

另外需要注意的一点就是,导航的宽度必须是固定值,不能是auto或者100%因为fixed和absolute都不认识,当然你也可以手动获取到导航的宽度,然后写到浮动导航样式里,不过有个前提,导航原先样式里不能有:position:relative,情况可能比较多,最简单的方法还是把导航宽度定死。

以上代码可以复制复制到后台设置的HTML页脚代码里,如果遇到浮动导航宽度出问题了,就参考我刚才做的处理办法解决吧。

Javascript 相关文章推荐
javascript 函数参数限制说明
Nov 19 Javascript
JavaScript继承学习笔记【新手必看】
May 10 Javascript
jQuery实现的网页换肤效果示例
Sep 20 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
Sep 21 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
Feb 10 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
Mar 10 Javascript
Node.js 8 中的重要新特性
Jun 28 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
Nov 17 Javascript
微信小程序实现倒计时调用相机自动拍照功能
Jun 10 Javascript
Vue自定义弹窗指令的实现代码
Aug 13 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
Aug 13 Javascript
ES6 十大特性简介
Dec 09 Javascript
javascript代码编写需要注意的7个小细节小结
Sep 21 #Javascript
extjs 初始化checkboxgroup值的代码
Sep 21 #Javascript
基于jquery的一个拖拽到指定区域内的效果
Sep 21 #Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
Sep 21 #Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
Sep 21 #Javascript
Dom操作之兼容技巧分享
Sep 20 #Javascript
js获取图片大小的函数代码
Sep 20 #Javascript
You might like
PHP 中文处理技巧
2010/04/25 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
2015/04/21 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
JS定时器实例
2013/04/17 Javascript
使用CSS和jQuery模拟select并附提交后取得数据的代码
2013/10/18 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
简单的js表格操作
2016/09/24 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
JavaScript实现多栏目切换效果
2016/12/12 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
python中定义结构体的方法
2013/03/04 Python
python3.4爬虫demo
2019/01/22 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
使用pandas读取文件的实现
2019/07/31 Python
使用pyplot.matshow()函数添加绘图标题
2020/06/16 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
大学生收银员求职信分享
2014/01/02 职场文书
电脑专业个人求职信范文
2014/02/04 职场文书
教育局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
五四青年节活动总结
2015/02/10 职场文书
爱心募捐通知范文
2015/04/27 职场文书