js页面滚动时层智能浮动定位实现(jQuery/MooTools)


Posted in Javascript onAugust 23, 2011

一、应用展示
关于层的智能浮动效果早在几年前我就在国外的一些个人网站的垂直导航上见到了,现在似乎在国内一些商业网站上也屡见此效果,例如淘宝网的搜索结果页的排序水平条,在默认状态下,滚动条跟随页面滚动,如下:

js页面滚动时层智能浮动定位实现(jQuery/MooTools)

随着页面向下滚动,当此水平条接触浏览器的上边缘时,水平条独立出来,不跟随滚动条滚动了,如下图所示:
js页面滚动时层智能浮动定位实现(jQuery/MooTools)

类似的效果在新浪微博上也有:
js页面滚动时层智能浮动定位实现(jQuery/MooTools)

当页面滚动,新动态提示开始要淡出浏览器窗口的时候,其浮动于浏览器窗口的最上沿显示,如下图所示:
js页面滚动时层智能浮动定位实现(jQuery/MooTools)

此效果实现原理其实很简单,本文就将展示其实现。 

二、实现原理

默认状态就是默认状态,什么事情也不用做,定位是absolute也好,static也好,都ok。关键是当浏览器滚动的时候,对象(要浮动的层)要移除浏览器界面视区的时候,修改其position属性,让其浮动在窗口的上沿显示就可以了。最好的position属性就是fixed了,可以在IE6+和其他浏览器下浮动层平滑固定定位,由于IE6前辈不支持fixed属性,所以,后退一步,使用absolute属性代替,但是会有副作用——滚动不平滑。但,这也是没有办法的事情了。

现在关键就是如何判断当前层与浏览器窗口的上边缘接触呢?当浮动层与浏览器窗口上边缘接触的一瞬间,其页面垂直偏移值与页面的滚动高度其实是一致的,所以,用这个进行判断就OK了,但是,如何获得页面上元素距离页面的垂直距离呢?纯粹的js代码获得此值还是比较麻烦的,好在JavaScript库帮我们解决了这些工作,所以,我们的工作其实就很平坦,下面就将展示如何在jQuery库以及MooTools库下实现该效果。

三、jQuery下的层的智能浮动

方法代码如下:

$.fn.smartFloat = function() { 
var position = function(element) { 
var top = element.position().top, pos = element.css("position"); 
$(window).scroll(function() { 
var scrolls = $(this).scrollTop(); 
if (scrolls > top) { 
if (window.XMLHttpRequest) { 
element.css({ 
position: "fixed", 
top: 0 
}); 
} else { 
element.css({ 
top: scrolls 
}); 
} 
}else { 
element.css({ 
position: "absolute", 
top: top 
}); 
} 
}); 
}; 
return $(this).each(function() { 
position($(this)); 
}); 
};

调用很简单,直接一行代码就ok了,例如下面:

$("#float").smartFloat();
妥妥儿的,就一小段绑定就实现了id为float的标签有了智能浮动功能,效果描述就是:当id为float的元素在滚动的时候与浏览器上边缘接触时就不会再跟随滚动条滚动了。

您可以狠狠地点击这里:jQuery下的层的智能浮动demo

打开demo页面,您会看到右侧自诩羞涩的浮动层了,滚动页面观察效果:
js页面滚动时层智能浮动定位实现(jQuery/MooTools)

四、MooTools下的层的智能浮动

与jQuery实现一样,MooTools库下也已经将此方法包装了起来,代码如下:

var $smartFloat = function(elements) { 
var position = function(element) { 
var top = element.getPosition().y, pos = element.getStyle("position"); 
window.addEvent("scroll", function() { 
var scrolls = this.getScroll().y; 
if (scrolls > top) { 
if (window.XMLHttpRequest) { 
element.setStyles({ 
position: "fixed", 
top: 0 
}); 
} else { 
element.setStyles({ 
top: scrolls 
}); 
} 
}else { 
element.setStyles({ 
position: "absolute", 
top: top 
}); 
} 
}); 
}; 
if ($type(elements) === "array") { 
return elements.each(function(items) { 
position(items); 
}); 
} else if ($type(elements) === "element") { 
position(elements); 
} 
};

使用也是非常的简单,就一句代码,同样以id为float的标签举例,代码如下:

$smartFloat($("float"));
您可以狠狠地点击这里:MooTools下的层的智能浮动demo

滚动demo页面的滚动条,当“羞涩”的浮动层与浏览器边缘“接触”的时候,就不再跟随滚动条滚动了,如下图所示:
js页面滚动时层智能浮动定位实现(jQuery/MooTools)
来自张鑫旭

Javascript 相关文章推荐
JavaScript 学习笔记(四)
Dec 31 Javascript
分享Javascript中最常用的55个经典小技巧
Nov 29 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
Oct 30 Javascript
JavaScript数组Array对象增加和删除元素方法总结
Jan 20 Javascript
js实现String.Fomat的实例代码
Sep 02 Javascript
详解JavaScript中的属性和特性
Dec 08 Javascript
微信小程序引用公共js里的方法的实例详解
Aug 17 Javascript
javaScript 连接打印机,打印小票的实例
Dec 29 Javascript
JS实现HTML页面中动态显示当前时间完整示例
Jul 30 Javascript
vue中设置、获取、删除cookie的方法
Sep 21 Javascript
关于Layui Table隐藏列问题
Sep 16 Javascript
Vue组件更新数据v-model不生效的解决
Apr 02 Vue.js
jQuery页面滚动浮动层智能定位实例代码
Aug 23 #Javascript
jqGrid jQuery 表格插件测试代码
Aug 23 #Javascript
30个精美的jQuery幻灯片效果插件和教程
Aug 23 #Javascript
js 函数的副作用分析
Aug 23 #Javascript
javascript 运算数的求值顺序
Aug 23 #Javascript
读jQuery之十四 (触发事件核心方法)
Aug 23 #Javascript
读jQuery之十三 添加事件和删除事件的核心方法
Aug 23 #Javascript
You might like
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
php最简单的删除目录与文件实现方法
2014/11/28 PHP
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
php简单压缩css样式示例
2016/09/22 PHP
删除PHP数组中的重复元素的实现代码
2017/04/10 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
浅谈JS的原型和继承
2019/05/08 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
python多进程操作实例
2014/11/21 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
eBay德国站:eBay.de
2017/09/14 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
物业管理毕业生个人的求职信
2013/11/30 职场文书
仓库门卫岗位职责
2013/12/22 职场文书
地球一小时倡议书
2014/04/15 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
学校财务管理制度
2015/08/04 职场文书
会议承办单位欢迎词
2019/07/09 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python