div随页面滚动遇顶固定的两种方法(js&jQuery)

一、遇顶固定的例子

我一直以为是某个div或层随屏幕滚动,遇顶则固定,离开浏览器顶部又还原这样的例子其实不少,其实它的名字叫“层的智能浮动效果”。目前我们在国内的商业网站上就常常看到这样的效果了。例如淘宝网的搜索结果页的排序水平条,在默认状态时,该工具条是跟随页面滚动的,如下图:

而当我们下拉滚动条,随着页面向下滚动,当此工具条接触到浏览器的上边缘时,这时就会独立出来固定在顶部,不跟随页面滚动而滚动了,如下图:

类似的例子效果我们在别的网站上都有看到过,例如腾讯微博首页上,当我们下拉屏幕浏览最新微博时,工具条也会出现这个效果,如下图:

这个效果看上去方便,贴心,也许还带推动广告的促销呢。原理其实很简单,本文展示两种方法。

二、智能浮动效果的实现原理

它分两种状态,一是默认状态,二是浮动固顶状态。

默认状态就是默认状态,什么也不用做,保持原有的CSS就好。无论有没有对它做定位,做了absolute也好,没做也好,都行。

关键是当浏览器屏幕滚动时,该对象div层要移除浏览器界面视区的时候,是要修改它的position属性,让它浮动在窗口的上沿显示就行了。最好的position属性是fixed,可以在IE6+和其他浏览器浮动层平滑的固定定位,由于IE6老大哥不支持fixed属性,所以可以另外赋予它absolute属性。当然也会产生副作用——滚动不平滑。不过也无所谓了,在微软公布不再修补更新XP漏洞,在中国360安全卫士的帮助下虽然大家仍然使用XP,但IE的用户已经是少之又少了。

那接下来,如何判断当前div层与浏览器窗口的上边缘接触了呢?遇到浏览器顶部了呢?

当浮动层div与浏览器窗口上边缘接触的一瞬间,其页面垂直偏移值与页面的滚动高度是一致的,所以我们就用这个进行判断。那如何获得页面上元素距离页面的垂直距离呢?

这里则是使用javaScript库实现。

三、第一种实现div层智能浮动的方法

具体代码如下:

$.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库呀。具体代码与压缩包请在文章末尾下载!

四、第二种实现div层的智能浮动效果办法

与前面的方法差不多,只是语句更简单一些,当然逻辑上是没有这么严谨吧。

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~9、遨游等等。

你可以点击这里下载相应的代码: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在本博客“上传文件”中

原文地址:https://www.cnblogs.com/kongxc/p/8242007.html

时间: 2024-10-06 03:43:38

div随页面滚动遇顶固定的两种方法(js&jQuery)的相关文章

静态化页面点击数实时的呈现的两种方法

静态化页面有时需要某一块“活起来”...在做新闻类项目时会碰到点击量排行,需要实时的进行显示, 以下是实现的两种方法: 第一种方法:通过AJAX实现:将数据提交给PHP文件经行处理,并将处理后的结果返回: $(function(){ $.ajax({ url:'{$smarty.const.BASE_URL}news/clickNews.php', data:'id={$arr.id}', success:function(re){ $("#showNewsTop").html(re)

scrollview滚动到指定区域的两种方法

方法一:利用偏移量来滚动 - (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated; 方法二:利用rect来滚动 - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated; 注意点:如何使用scrollRectToVisible:animated:这个方法,需要把contentSize的width和height都不能为0,否则不能滚动.

页面滚动时出现固定导航

页面滚动时出现固定导航的效果,参考页面有http://v.thea.cn/course/info_358和v.thea.cn. 参考代码如下: <div class="tab-title" style="position: static; top: 0px;"><span class="normal selected">课程介绍</span><span class="normal"&g

设置一个DIV块固定在屏幕中央(两种方法)

设置一个DIV块固定在屏幕中央(两种方法) 方法一: 对一个div进行以下设置即可实现居中. <style> #a{ position: fixed; top: 0px; left: 0px; right: 0px; bottom: 0px; margin: auto; } </style> <!doctype html> <html lang="zh-cn"> <head> <meta charset="UT

HTML 页面加载 Flash 插件的几种方法

前言 之所以写这篇文章,主要是因为组长给提的一个新的需求--使用浏览器调用电脑的摄像头,来实现即时拍照的功能.在网上查了很多资料,由于这样那样的原因,最终选择了使用flash插件来调用pc的摄像头.当然,这个需求是基于B/S架构的,因此,就在想怎么把它嵌入到前端的HTML页面中. 题外话 当然,这里还没有考虑到封装,主要是先以实现为目的,后续工作再根据业务进行抽象,封装成通用的组件.好了,废话不多说,看重点. 嵌入插件 使用 object 和 embed 标签 代码展示 <span style=

php在数字前面补0得到固定长度数字的两种方法

比较基础,其实两个内置函数都能实现. 1  sprintf 语法: string sprintf(string format, mixed [args]...); 返回值: 字符串 函数种类: 资料处理 本函数用来将字符串格式化.参数 format 是转换的格式,以百分比符号 % 开始到转换字符为止.而在转换的格式间依序包括了 填空字符.0 的话表示空格填 0:空格是默认值,表示空格就放着. 对齐方式.默认值为向右对齐,负号表向左对齐. 字段宽度.为最小宽度. 精确度.指在小数点后的浮点数位数.

两种方法实现在HTML页面加载完毕后运行某个js

两种方法实现在HTML页面加载完毕后运行某个js 这篇文章主要介绍了通过两种方法实现在HTML页面加载完毕后运行某个js,需要的朋友可以参考下 js方法: 复制代码 代码如下: <script type="text/javascript"> window.onload=function(){ var userName="xiaoming"; alert(userName); } </script> 以下为jQuery方法,需要引用jQuery

Apacheserver自己定义404页面的两种方法以及.htaccess的重要命令总结

Apacheserver自己定义404错误页面有两种方法: 第一种方法最简单,直接在Apache的httpd.conf下进行配置改动命令,改动的内容请參看.htaccess命令写法中的自己定义错误页面 另外一种方法能够在.htaccess文件里配置命令,详细操作请參看.htaccess命令写法中的自己定义错误页面 .htaccess用法总结 1 . 首先让的本地APACHEserver器同意.htaccess改动 打开httpd.conf (1) Options FollowSymLinks A

Apache服务器自定义404页面的两种方法以及.htaccess的重要命令总结

Apache服务器自定义404错误页面有两种方法: 第一种方法最简单,直接在Apache的httpd.conf下进行配置修改命令,修改的内容请参看.htaccess命令写法中的自定义错误页面 第二种方法可以在.htaccess文件中配置命令,具体操作请参看.htaccess命令写法中的自定义错误页面 .htaccess使用方法总结 1 . 首先让的本地APACHE服务器器允许.htaccess修改 打开httpd.conf (1) Options FollowSymLinks AllowOver