我一直觉得是某个div或层随屏幕滚动,遇顶则固定,离开浏览器顶部又还原这样的例子其实很多,其实它的名字叫“层的智能浮动效果”。目前咱们在国内的商业网站上就经常看到这样的效果了。例如淘宝网的搜索结果页的排序水平条,在默认状态时,该工具条是跟随页面滚动的,以下图:css
而当咱们下拉滚动条,随着页面向下滚动,当此工具条接触到浏览器的上边缘时,这时就会独立出来固定在顶部,不跟随页面滚动而滚动了,以下图:html
相似的例子效果咱们在别的网站上都有看到过,例如腾讯微博首页上,当咱们下拉屏幕浏览最新微博时,工具条也会出现这个效果,以下图:java
这个效果看上去方便,贴心,也许还带推进广告的促销呢。原理其实很简单,本文展现两种方法。jquery
它分两种状态,一是默认状态,二是浮动固顶状态。web
默认状态就是默认状态,什么也不用作,保持原有的CSS就好。不管有没有对它作定位,作了absolute也好,没作也好,都行。浏览器
关键是当浏览器屏幕滚动时,该对象div层要移除浏览器界面视区的时候,是要修改它的position属性,让它浮动在窗口的上沿显示就好了。最好的position属性是fixed,能够在IE6+和其余浏览器浮动层平滑的固定定位,因为IE6老大哥不支持fixed属性,因此能够另外赋予它absolute属性。固然也会产生反作用——滚动不平滑。不过也无所谓了,在微软公布再也不修补更新XP漏洞,在中国360安全卫士的帮助下虽然你们仍然使用XP,但IE的用户已是少之又少了。安全
那接下来,如何判断当前div层与浏览器窗口的上边缘接触了呢?遇到浏览器顶部了呢?函数
当浮动层div与浏览器窗口上边缘接触的一瞬间,其页面垂直偏移值与页面的滚动高度是一致的,因此咱们就用这个进行判断。那如何得到页面上元素距离页面的垂直距离呢?工具
这里则是使用javaScript库实现。学习
具体代码以下:
$.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: pos,
top: top
});
}
});
};
return $(this).each(function() {
position($(this));
});
};
调用其实很简单,将须要浮动的目标层div所设定的id,添加到如下函数代码,以下:
$("#fixed").smartFloat();
这样两段代码就能够实现ID为fixed的层有了智能浮动效果,当该层在页面滚动时,与浏览器上边缘接触时就会固定顶部,再也不跟随滚动条而滚动了。当滚动回上面时,又会还原成原有状态。固然,别忘记在页面head以前调用jquery库呀。具体代码与压缩包请在文章末尾下载!
与前面的方法差很少,只是语句更简单一些,固然逻辑上是没有这么严谨吧。
function scrollLis(){
var toTop = offs.top-$(window).scrollTop();
if(toTop==0||toTop<0){
if(!$('#fixed').hasClass('ab'))$('#fixed').addClass('ab');
}else{
$('#fixed').removeClass('ab');
}
}
它的调用就多了几句代码了,一样是放在层的后面,以ID标签fixed为名:
var offs=$('#fixed').offset();
$(window).scroll(function(){
scrollLis();
});
以上两种方法咱们都在不一样的浏览器下测试经过,包括了360安全浏览器、搜狗、火狐、IE6~九、遨游等等。
你能够点击这里下载相应的代码:div层随屏幕滚动遇顶固定的智能浮动效果 http://www.seo0763.net/uploads/soft/div-follow-web-totop.rar
已经好久没有写这些效果与实例文章了,好多项目都在尝试当中,时间也是过得飞快。也只有当遇到问题须要解决时,才在收集资料、学习研究后才分享出来。
固然咱们的能力有限,资历很浅,这些方法仅供参考。或者有别的更好的更简洁更快速的方法,也欢迎你们分享给咱们。本文属于原创文章,由英德网站建设http://www.seo0763.net提供,转载请注明出处。
来源:http://blog.sina.com.cn/s/blog_a438a4be0101spft.html
demo在本博客“上传文件”中