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 XML操作 封装类
Jul 01 Javascript
JS获得URL超链接的参数值实例代码
Jun 21 Javascript
JS实现具备延时功能的滑动门菜单效果
Sep 17 Javascript
Bootstrap Table 搜索框和查询功能
Nov 30 Javascript
vue通过路由实现页面刷新的方法
Jan 25 Javascript
vue项目中api接口管理总结
Apr 20 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
May 28 Javascript
微信小程序绘制半圆(弧形)进度条
Nov 18 Javascript
微信小程序实现分页加载效果
Nov 19 Javascript
VUE中鼠标滚轮使div左右滚动的方法详解
Dec 14 Vue.js
JavaScript实现瀑布流布局的3种方式
Dec 27 Javascript
Vue仿百度搜索功能
Dec 28 Vue.js
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
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
php实现处理输入转义字符的代码
2015/11/08 PHP
php采用session实现防止页面重复刷新
2015/12/24 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
PHP中->和=>的含义及使用示例解析
2020/08/06 PHP
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
Nodejs+express+html5 实现拖拽上传
2014/08/08 NodeJs
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
微信小程序获取用户信息并保存登录状态详解
2019/05/10 Javascript
JavaScript单线程和任务队列原理解析
2020/02/04 Javascript
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
python datetime处理时间小结
2020/04/16 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
Django数据统计功能count()的使用
2020/11/30 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
用python计算文件的MD5值
2020/12/23 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
让IE6、IE7、IE8支持CSS3的脚本
2010/07/20 HTML / CSS
html5.2 dialog简介详解
2018/02/27 HTML / CSS
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
高三自我鉴定怎么写
2013/10/19 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
赢在中国观后感
2015/06/02 职场文书
Golang 实现超大文件读取的两种方法
2021/04/27 Golang
如何在Python项目中引入日志
2021/05/31 Python