原文:position:fixed和scroll实现div浮动【示例】

前言

  在自己建站的过程中,要实现一个div随滚动条浮动的效果,网上找了些示例不太好用,还是自己动手,丰衣足食,写的不好请大家谅解,毕竟我不是搞前端的,因为自己建站毕竟每一步都必须自己来,这边只是做个记录。

position:fixed

  实现浮动主要有个css属性:position:fixed,从单词上就知道是固定的意思,这边就用我博客的公告栏做个示例:

  上面是从博客园中复制下来的代码,放到本地自己调试,当然大家可以看到好的页面或者效果,可以搞下来研究。上面的效果可以看出样式中加了个position:fixed;属性,公告栏不随着滚动条的滚动而变化位置,其实这个效果也可以满足一些需求。这个默认固定在左上部,我们需要定位在右上部加个right:10px;属性即可:

  我们见到有的网站上面的导航条随着滚动条固定在顶部,就是这种方法实现,对于不搞前端的来说可能觉得很难,其实就这么简单。

不要高估别人,低估自己,其实深入内心,很多你自以为很了不起的人,其实也没什么,真是这样。

  有点跑偏啊,只是多想了点,对于一些你不曾接触到的领域,觉得很遥远,接触了,你会发现,其实也就这样。

scroll

  有时候有这种情况:在指定的地方浮动和不浮动,这种情况只是上面的position:fixed属性就实现不了了,要结合滚动条滚动事件scroll,使用scroll事件需要注意要结合一些属性和方法。

  • scrollTop()方法的意思:对象的最顶部到对象在当前窗口显示的范围内的顶边的距离,可以理解为滚动条从上面开始滚动的距离。
  • offsetTop属性的意思:当前对象到其上级层顶部的距离,这个是指定对象的。
  • offsetHeight属性的意思:当前对象的高度值,这个值是不会随着滚动条变化的。

  关于scroll的一些方法和属性不止这些,上面三个是我们要用到的,关于其他的大家可以搜下相关解释,我们看下实现代码。

  样式代码和html代码:

1 .canfloat2         {
3 position:fixed;
4 top:10px;
5         }
6 .newsItem7         {
8 width:220px;
9 float:right;
10 padding:0px 0px 5px;
11 margin-bottom:2em;
12         }
13 .newsItem .catListTitle14         {
15 text-align:left;
16 padding:5px 10px;
17 border:1px solid #CCC;
18 background:none repeat scroll 0% 0% #F0F0F0;
19         }
20 .catListTitle21         {
22 font-weight:bold;
23 line-height:1.5em;
24 font-size:110%;
25 margin-top:15px;
26 margin-bottom:10px;
27 border-bottom:1px solid #000;
28 text-align:center;
29         }

View Code

1 <div>
2         <divstyle="height: 2500px; float: left;">
3         </div>
4         <divclass="newsItem">
5             <divstyle="height: 500px;">
6             </div>
7             <div>
8 我只是占位的9             </div>
10             <divid="floatdiv"class="canfloat">
11                 <h3class="catListTitle">
12                     公告</h3>
13                 <divid="blog-news">
14                     <astyle="padding-right: 20px;"href="http://wpa.qq.com/msgrd?v=3&amp;uin=624541997&amp;site=qq&amp;menu=yes"
15 target="_blank">
16                         <imgstyle="vertical-align: bottom; border: 0px"src="http://wpa.qq.com/pa?p=1:624541997:13"
17 alt="点击这里给我发消息"></a>
18                     <objectclassid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
19 id="honehoneclock"align="middle"height="70"width="160">
20                         <paramname="allowScriptAccess"value="always">
21                         <paramname="movie"value="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_tr.swf">
22                         <paramname="quality"value="high">
23                         <paramname="bgcolor"value="#ffffff">
24                         <paramname="wmode"value="transparent">
25                         <embedwmode="transparent"src="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_tr.swf"
26 quality="high"bgcolor="#ffffff"name="honehoneclock"allowscriptaccess="always"
27 type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer"
28 align="middle"height="70"width="160"></object>
29                     <divid="profile_block">
30                         昵称:<ahref="http://home.cnblogs.com/u/xishuai/">田园里的蟋蟀</a><br>
31                         园龄:<ahref="http://home.cnblogs.com/u/xishuai/"title="入园时间:2012-08-07">1年6个月</a><br>
32                         粉丝:<ahref="http://home.cnblogs.com/u/xishuai/followers/">137</a><br>
33                         关注:<ahref="http://home.cnblogs.com/u/xishuai/followees/">10</a><divid="p_b_follow">
34                         </div>
35                     </div>
36                     <scripttype="text/javascript">loadBlogNews();</script>
37                 </div>
38             </div>
39         </div>
40     </div>

View Code

  js代码:

1         $(function() {2             $(window).scroll(function() {3                 var ref_min = $("#floatdiv")[0];4                 if (!ref_min) return;5                 var scroll_top =$(window).scrollTop();6                 var ref_height_min = ref_min.offsetTop + $("#floatdiv")[0].offsetHeight;7                 if (scroll_top >ref_height_min) {8                     $("#floatdiv").addClass("canfloat");9                 } else{10                     $("#floatdiv").removeClass("canfloat");11 }12 });13         });

  scroll_top获取当前滚动条滚动的距离,ref_height_min是开始浮动的距离,大于的话就开始浮动,小于的话就不浮动,代码看起来是没什么问题,我们看下运行效果:

  上面的效果基本上没什么问题,但是仔细看下就会发现,浮动框在不该浮动的地方浮动,在该浮动的地方浮动,好像是距离的判断出现问题,问题出在哪?就在ref_min.offsetTop这句代码,如果我们实现的是从顶部开始滚动,这段代码是不会出现问题的,因为ref_min.offsetTop始终保持一致(如果设置浮动框和开始浮动宽的距离顶端高度设置一样),如果不从顶端开始浮动,当开始浮动的时候,浮动框距离顶部的值是一定的,我们想要的应该是变化的,所有就会出现上面的问题。

解决问题

  解决上面的问题其实很简单,就是不用浮动框获取距离顶端的高度,用一个标记来记录,我们修改一下上面的代码:

  html代码:

1 <div>
2         <divstyle="height: 2500px; float: left;">
3         </div>
4         <divclass="newsItem">
5             <divstyle="height: 500px;">
6             </div>
7             <div>
8 我只是占位的9             </div>
10             <divid="sign"title="我只是记录的">
11             </div>
12             <divid="floatdiv"class="canfloat">
13                 <h3class="catListTitle">
14                     公告</h3>
15                 <divid="blog-news">
16                     <astyle="padding-right: 20px;"href="http://wpa.qq.com/msgrd?v=3&amp;uin=624541997&amp;site=qq&amp;menu=yes"
17 target="_blank">
18                         <imgstyle="vertical-align: bottom; border: 0px"src="http://wpa.qq.com/pa?p=1:624541997:13"
19 alt="点击这里给我发消息"></a>
20                     <objectclassid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
21 id="honehoneclock"align="middle"height="70"width="160">
22                         <paramname="allowScriptAccess"value="always">
23                         <paramname="movie"value="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_tr.swf">
24                         <paramname="quality"value="high">
25                         <paramname="bgcolor"value="#ffffff">
26                         <paramname="wmode"value="transparent">
27                         <embedwmode="transparent"src="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_tr.swf"
28 quality="high"bgcolor="#ffffff"name="honehoneclock"allowscriptaccess="always"
29 type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer"
30 align="middle"height="70"width="160"></object>
31                     <divid="profile_block">
32                         昵称:<ahref="http://home.cnblogs.com/u/xishuai/">田园里的蟋蟀</a><br>
33                         园龄:<ahref="http://home.cnblogs.com/u/xishuai/"title="入园时间:2012-08-07">1年6个月</a><br>
34                         粉丝:<ahref="http://home.cnblogs.com/u/xishuai/followers/">137</a><br>
35                         关注:<ahref="http://home.cnblogs.com/u/xishuai/followees/">10</a><divid="p_b_follow">
36                         </div>
37                     </div>
38                     <scripttype="text/javascript">loadBlogNews();</script>
39                 </div>
40             </div>
41         </div>
42     </div>

View Code

  js代码:

1         $(function() {2             $(window).scroll(function() {3                 var ref_min = $("#sign")[0];4                 if (!ref_min) return;5                 var scroll_top =$(window).scrollTop();6                 var ref_height_min = ref_min.offsetTop + $("#floatdiv")[0].offsetHeight;7                 if (scroll_top >ref_height_min) {8                     $("#floatdiv").addClass("canfloat");9                 } else{10                     $("#floatdiv").removeClass("canfloat");11 }12 });13         });

  上面的html只是浮动框上部加了个div标记来记录浮动高度,var ref_min = $("#sign")[0];获取的是标记的浮动高度,而不是浮动框的浮动高度。这样基本上可以解决上面出现的问题,我们看下运行效果:

  完整代码:

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2 <htmlxmlns="http://www.w3.org/1999/xhtml">
3 <head>
4     <title></title>
5     <styletype="text/css">
6 .canfloat7         {
8 position:fixed;
9 top:10px;
10         }
11 .newsItem12         {
13 width:220px;
14 float:right;
15 padding:0px 0px 5px;
16 margin-bottom:2em;
17         }
18 .newsItem .catListTitle19         {
20 text-align:left;
21 padding:5px 10px;
22 border:1px solid #CCC;
23 background:none repeat scroll 0% 0% #F0F0F0;
24         }
25 .catListTitle26         {
27 font-weight:bold;
28 line-height:1.5em;
29 font-size:110%;
30 margin-top:15px;
31 margin-bottom:10px;
32 border-bottom:1px solid #000;
33 text-align:center;
34         }
35     </style>
36     <scriptsrc="Scripts/jquery-1.4.1.js"type="text/javascript"></script>
37     <scripttype="text/javascript">
38 $(function() {39 $(window).scroll(function() {40                 varref_min=$("#sign")[0];41                 if(!ref_min)return;42                 varscroll_top=$(window).scrollTop();43                 varref_height_min=ref_min.offsetTop+$("#floatdiv")[0].offsetHeight;44                 if(scroll_top>ref_height_min) {45 $("#floatdiv").addClass("canfloat");46 }else{47 $("#floatdiv").removeClass("canfloat");48 }49 });50 });51     </script>
52 </head>
53 <body>
54     <div>
55         <divstyle="height: 2500px; float: left;">
56         </div>
57         <divclass="newsItem">
58             <divstyle="height: 500px;">
59             </div>
60             <div>
61 我只是占位的62             </div>
63             <divid="sign"title="我只是记录的">
64             </div>
65             <divid="floatdiv"class="canfloat">
66                 <h3class="catListTitle">
67                     公告</h3>
68                 <divid="blog-news">
69                     <astyle="padding-right: 20px;"href="http://wpa.qq.com/msgrd?v=3&amp;uin=624541997&amp;site=qq&amp;menu=yes"
70 target="_blank">
71                         <imgstyle="vertical-align: bottom; border: 0px"src="http://wpa.qq.com/pa?p=1:624541997:13"
72 alt="点击这里给我发消息"></a>
73                     <objectclassid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"
74 id="honehoneclock"align="middle"height="70"width="160">
75                         <paramname="allowScriptAccess"value="always">
76                         <paramname="movie"value="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_tr.swf">
77                         <paramname="quality"value="high">
78                         <paramname="bgcolor"value="#ffffff">
79                         <paramname="wmode"value="transparent">
80                         <embedwmode="transparent"src="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_tr.swf"
81 quality="high"bgcolor="#ffffff"name="honehoneclock"allowscriptaccess="always"
82 type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer"
83 align="middle"height="70"width="160"></object>
84                     <divid="profile_block">
85                         昵称:<ahref="http://home.cnblogs.com/u/xishuai/">田园里的蟋蟀</a><br>
86                         园龄:<ahref="http://home.cnblogs.com/u/xishuai/"title="入园时间:2012-08-07">1年6个月</a><br>
87                         粉丝:<ahref="http://home.cnblogs.com/u/xishuai/followers/">137</a><br>
88                         关注:<ahref="http://home.cnblogs.com/u/xishuai/followees/">10</a><divid="p_b_follow">
89                         </div>
90                     </div>
91                     <scripttype="text/javascript">loadBlogNews();</script>
92                 </div>
93             </div>
94         </div>
95     </div>
96 </body>
97 </html>

View Code

  示例下载:scrollTop.rar

position:fixed和scroll实现div浮动【示例】相关推荐

  1. 使position:fixed不与其他div重叠 ,fixed所在div高度不变和可变两种情况

    由于fixed会使元素脱离文档流,让该div不与其他div重叠有两种方法 高度固定的情况 方法一:设置下方区域的padding-top padding-top: XXpx 方法二:设置fixed所在d ...

  2. position:fixed;

    为什么设置position:fixed:div会消失. 此文如有不正确的地方,敬请留言指出,谢谢. 1.position:fixed;作用 生成绝对定位的元素, 相对于浏览器窗口进行定位.可以通过设置 ...

  3. 关于固定定位position: fixed;和横向滚动overflow-x: scroll;无法同时使用的问题

    在做项目时遇到一个功能是要把某个盒子固定在底部,并且是要横向滑动的,发现position: fixed;和overflow-x: scroll;同时使用无效,现记录一下解决方法 <style&g ...

  4. css中position:fixed为啥下面还要设置一个div的height

    css中position:fixed会造成"高度塌陷". 高度塌陷: 父元素包含子元素,子元素设置为浮动且父元素的height为auto或者不设置height,子元素就会脱离文档流 ...

  5. php 上下位置居中,CSS_css中position:fixed实现div在窗口上下左右居中,上下左右 居中 代码如下 复制 - phpStudy...

    css中position:fixed实现div在窗口上下左右居中 上下左右 居中 代码如下 复制代码代码如下: div{ position:fixed; margin:auto; left:0; ri ...

  6. html随页面移动固定,div设置了position: fixed属性后如何可以做到随浏览器左右移动?...

    把一个div标签,给它的属性设置position: fixed;bottom:0;固定在浏览器的最底部. 这个div标签在浏览器上下滚动的时候,会一直保持在屏幕最底部,这一点没有问题.但问题是当浏览器 ...

  7. 解决div用了position: fixed后滚动条显示不完整的问题

    解决div用了position: fixed后滚动条显示不完整的问题 参考文章: (1)解决div用了position: fixed后滚动条显示不完整的问题 (2)https://www.cnblog ...

  8. position:fixed定位后下面紧接着div等元素的问题

    处理办理:在后面pistion:fixed后面,紧接着加一个空的设有高度的div <div class="ziye_toub"> //这个div position:fi ...

  9. css position fixed 居中,css中position:fixed实现div居中上下左右居中

    上下左右 居中 代码如下 div{ position:fixed; margin:auto; left:0; right:0; top:0; bottom:0; width:200px; height ...

最新文章

  1. R语言abline函数为图像添加竖线、横线、斜线、回归线实战
  2. 如何解决Office2016安装时提示:错误1406。安装程序无法将值写入注册表项\.xlsx
  3. 网络推广外包专员浅析为什么说早在建站初期就要做好网络推广外包
  4. Maven(5)--常用插件
  5. 基于.NET Core的优秀开源项目合集
  6. matlab s函数_matlab结构体 rmfield,arrayfun,structfun,struct2cell,cell2struct
  7. Java NIO编程基础
  8. 头条2020届实习生笔试题
  9. windows核心编程第二章阅读
  10. 自由软件运动与GNU项目
  11. 模式识别与机器学习---绪论
  12. php免费项目下载文件,php——文件下载
  13. python更改图片存储大小_python不改变图片尺寸压缩到指定大小
  14. 一个简单的app爬虫:对近期热播剧《三十而已》进行知乎app关键词搜索
  15. flutter onPressed onTap等手势检测及触摸事件处理
  16. 乐视max2卡刷安卓9.0流畅运行
  17. docker容器 如何精简镜像减小体积
  18. 【LVGL学习笔记】(三)控件使用
  19. 前面的号码不足为奇,后面的才是重点
  20. Unix痛恨者手册zz UNIX hater' guide

热门文章

  1. Java JDBC数据库 之 DBUtil 封装类
  2. 出现次数最多的数-CCF模拟
  3. php插入代码数据库
  4. java泛化_JAVA泛化及为什么需要泛化
  5. python优先队列_python实现最大优先队列
  6. springboot oauth2登录成功处理器_Spring Boot Security 整合 OAuth2 设计安全API接口服务...
  7. [NLP]--NLP programming tutorial
  8. python标准库有多强大_Python标准库——走马观花
  9. 对家庭网络设备行业的理解
  10. 揭开雷达的面纱(科普)探测能力