JQuery Mobile+JS实现智能浮动定位导航条
实现原理
主要用到几个知识点:
原理:
1,浏览器向下滚动时,当document的scrollTop大于浮动层离窗口顶部的距离时,就让浮动层的position属性设为fixed定位,脱离文档流
2,浏览器向上滚动时,当document的scrollTop小于浮动层离窗口顶部的距离时,就让浮动层的position属性设为static定位,回归文档流
代码实现
先看看html和css代码,很简单
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>float_nav</title>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.css"/>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.min.js"></script>
<script type="text/javascript" src="http://code.jquery.com/mobile/1.0a3/jquery.mobile-1.0a3.min.js"></script>
</head> <body>
<div data-role="page">
<div data-role="header">
<h1>HEADER</h1>
</div> <div data-role="navbar" id="nav">
<ul>
<li><a href="#">Section 1</a></li>
<li><a href="#">Section 2</a></li>
<li><a href="#">Section 3</a></li>
<li><a href="#">Section 4</a></li>
<li><a href="#">Section 5</a></li>
</ul>
</div> <div data-role="content">
<br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br />
<br /><br /><br /><br /><br /><br />
</div>
</div>
</body>
</html>
下面是js代码
1,先写一个获取元素距离顶部距离的函数 原理很简单,通过递归检查是否存在父元素,累加起来得到距离值
function getTop(e){
var offset = e.offsetTop;
if(e.offsetParent != null) offset += getTop(e.offsetParent);
return offset;
}
})();
2,我们接着写js代码
//先把浮动层对象存在一个变量中,方便后面调用
var obj = document.getElementById("nav");//b为漂浮层的id
//获取浮动层元素离窗口顶部的距离
var top = getTop(obj);
3,接下来最重要的,给窗口绑定滚动事件
window.onscroll = function(){
//获取窗口的scrollTop
var bodyScrollTop = document.documentElement.scrollTop || document.body.scrollTop;
if (bodyScrollTop > top){
/*当窗口的滚动高度大于浮动层距离窗口顶部的距离时,也就是原理中说的第一种情况
*我们把这个浮动层position值设为fixed,top值设为0px,让它定位在窗口顶部*/
obj.style.position = "fixed";
obj.style.top = "0px";
obj.style.width="100%";
} else {
/*当窗口的滚动高度小于浮动层距离窗口顶部的距离时,也就是原理中说的第一种情况
*我们把这个浮动层position值设为static或为空,让它回归文档流
*让它回到原来的位置上去*/
obj.style.position = "static";
}
}
有的人的使用的是IE6浏览器,IE6不支持fixed.fixed是定位在窗口顶部,是相对于窗口,如果我们让元素通过position:absolute相对于body定位,top设为body的scrollTop值,也就可以在IE6中模拟fixed了
4,兼容IE6..首先在前面加上判断浏览器是否是IE6的语句
//判断浏览器是否是IE6
var isIE6 = /msie 6/i.test(navigator.userAgent);
再来改动下窗口滚动事件绑定的函数的两句
//......
if (bodyScrollTop > top){
//如果是IE6,就设置position为absolute,否则设为fixed
obj.style.position = (isIE6) ? "absolute" : "fixed";
//如果是IE6,就设置top值为bodyScrollTop,否则top为0
obj.style.top = (isIE6) ? bodyScrollTop + "px" : "0px";
} else {
//......
js完整代码如下:(将js代码放在body里面的最底下)
<script type="text/javascript">
(function(){
var obj = document.getElementById("nav");
var top = getTop(obj);
var isIE6 = /msie 6/i.test(navigator.userAgent);
window.onscroll = function(){
var bodyScrollTop = document.documentElement.scrollTop || document.body.scrollTop;
if (bodyScrollTop > top){
obj.style.position = (isIE6) ? "absolute" : "fixed";
obj.style.top = (isIE6) ? bodyScrollTop + "px" : "0px";
obj.style.width="100%";
} else {
obj.style.position = "static";
}
};
function getTop(e){
var offset = e.offsetTop;
if(e.offsetParent != null) offset += getTop(e.offsetParent);
return offset;
}
})();
</script>
JQuery Mobile+JS实现智能浮动定位导航条的更多相关文章
- Javascript:浮动的导航条
代码主体及说明 Javascript部分: /** * @函数名:flexScroll * @功能:滚动超出一定高度,指定元素悬浮 * @两个参数:target_id:目标元素id;topEle:限定 ...
- JQuery和原生JavaScript实现网页定位导航特效
慕课网的一个小课程,练习了一遍,不足之处,欢迎指正(照片在本地,大家可以着重看代码哈): <!DOCTYPE html> <html lang="en"> ...
- jquery.smint.js 页面菜单浮动之谷歌浏览器异常
jquery.smint.js 做公司项目时,谷歌测试,页面向下拉,刷新后,导航栏菜单与顶部距离发生变动,并不在设置的relative元素top下固定像素 我的relative元素的高为80,然后在j ...
- js页面滚动时层智能浮动定位实现
直接上代码 $.fn.smartFloat = function (className) { var position = function (element) { var top = element ...
- 使用 jQuery 实现当前页面高亮显示的通栏导航条
index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> ...
- jquery实现可以中英切换的导航条
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- jquery控制滚动条改变上面固定(fixed)导航条或者搜索框的属性
<script type="text/javascript"> $(document).ready(function(){ $(window).scroll( func ...
- easy Html5 - Jquery Mobile之ToolBars(Header and Footer)
jquery 在web js框架上的风暴还在继续却也随着移动终端走向了mobile:那么jquery mobile到底包括些什么呢 简介工具栏是在移动网站和应用中的头部,尾部或者内容中的工具条:Jqu ...
- 【jQuery基础学习】10 简单了解jQuery Mobile及jQuery各个级别版本的变化
关于 jQuery Mobile jQuery Mobile是为了填补jQuery在移动设备应用上的一个新项目.它应用了HTML5和CSS3. 主要特性 基于jQuery构建. 采用与jQuery一致 ...
随机推荐
- jquery 关于使用 append 追加 元素后 事件无法触发
当在使用js或jQuery创建元素时,用 on(事件,function(){代码}) 或者 事件(function(){代码 })绑定事件时 在使用append添加元素后 由于是在页面加载完成之后进行 ...
- [javaSE] 网络编程(概述)
网络通信的步骤, 1.找到对方的ip 2.数据发送到对方指定的应用程序上,为了标识这些应用程序,用数字进行标识,这个数字就是端口 3.定义通信规则,这个规则就称为协议 国际组织定义了通用协议 TCP/ ...
- 我用ASP.NET缓存之SQL数据缓存依赖(SqlCacheDependency)
[名词解释] 缓存(Cache)依赖,大白话解释就是缓存是否更新依赖于其它Object.那么SqlCacheDependency指的就是Cache的数据更新依赖于SQL Server数据库表的变化( ...
- HNCU专题训练_线段树(1)
1.内存控制2.敌兵布阵4.广告牌5.区间第k大数(模板题)6.just a Hook7.I Hate It8.动态的最长递增子序列(区间更新题)9.图灵树10.覆盖的面积14.买票问题16.村庄问题 ...
- Nginx 反向代理时获取用户的真实 IP
在平时我们开发后端程序的过程中,应该多多少少都会碰到记录客户端 IP 的场景,例如我之前写过的 APP 用户的一个审计功能,就需要获取用户的 IP 地址:还有广告系统里面,也是需要获取用户的 IP 地 ...
- CSS 媒体查询创建响应式网站
使用 CSS 媒体查询创建响应式网站 适用于所有屏幕大小的设计 固定宽度的静态网站很快被灵活的响应式设计所取代,该设计可以根据屏幕大小进行上扩和下扩.利用响应式设计,无论您采用什么设备或屏幕来访问网 ...
- [转]c# winform tcp connect timeout 连接超时设置
转自:https://www.cnblogs.com/jhlong/p/5622336.html 简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的 ...
- Ubuntu下彻底卸载wine
简介: wine是linux下模拟windows的一个东西,可以用来安装exe程序,但是对于wine的卸载确 实非常麻烦的,这里是彻底卸载wine的一个教程. ##首先卸载wine sudo apt- ...
- mybatis 一对多 id标签作用
一对多 MyBatis的resultMap只用于配置结果如何映射,id的唯一作用就是在嵌套的映射配置时判断数据是否相同,当配置id标签时,MyBatis只需要逐条比较所有数据中id标签字段值是否相同即 ...
- HBase Compaction详解
HBase Compaction策略 RegionServer这种类LSM存储引擎需要不断的进行Compaction来减少磁盘上数据文件的个数和删除无用的数据从而保证读性能. RegionServer ...