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         .canfloat
 2         {
 3             position: fixed;
 4             top: 10px;
 5         }
 6         .newsItem
 7         {
 8             width: 220px;
 9             float: right;
10             padding: 0px 0px 5px;
11             margin-bottom: 2em;
12         }
13         .newsItem .catListTitle
14         {
15             text-align: left;
16             padding: 5px 10px;
17             border: 1px solid #CCC;
18             background: none repeat scroll 0% 0% #F0F0F0;
19         }
20         .catListTitle
21         {
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         <div style="height: 2500px; float: left;">
 3         </div>
 4         <div class="newsItem">
 5             <div style="height: 500px;">
 6             </div>
 7             <div>
 8                 我只是占位的
 9             </div>
10             <div id="floatdiv" class="canfloat">
11                 <h3 class="catListTitle">
12                     公告</h3>
13                 <div id="blog-news">
14                     <a style="padding-right: 20px;" href="http://wpa.qq.com/msgrd?v=3&amp;uin=624541997&amp;site=qq&amp;menu=yes"
15                         target="_blank">
16                         <img style="vertical-align: bottom; border: 0px" src="http://wpa.qq.com/pa?p=1:624541997:13"
17                             alt="点击这里给我发消息"></a>
18                     <object classid="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                         <param name="allowScriptAccess" value="always">
21                         <param name="movie" value="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_tr.swf">
22                         <param name="quality" value="high">
23                         <param name="bgcolor" value="#ffffff">
24                         <param name="wmode" value="transparent">
25                         <embed wmode="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                     <div id="profile_block">
30                         昵称:<a href="http://home.cnblogs.com/u/xishuai/">田园里的蟋蟀</a><br>
31                         园龄:<a href="http://home.cnblogs.com/u/xishuai/" title="入园时间:2012-08-07">1年6个月</a><br>
32                         粉丝:<a href="http://home.cnblogs.com/u/xishuai/followers/">137</a><br>
33                         关注:<a href="http://home.cnblogs.com/u/xishuai/followees/">10</a><div id="p_b_follow">
34                         </div>
35                     </div>
36                     <script type="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         <div style="height: 2500px; float: left;">
 3         </div>
 4         <div class="newsItem">
 5             <div style="height: 500px;">
 6             </div>
 7             <div>
 8                 我只是占位的
 9             </div>
10             <div id="sign" title="我只是记录的">
11             </div>
12             <div id="floatdiv" class="canfloat">
13                 <h3 class="catListTitle">
14                     公告</h3>
15                 <div id="blog-news">
16                     <a style="padding-right: 20px;" href="http://wpa.qq.com/msgrd?v=3&amp;uin=624541997&amp;site=qq&amp;menu=yes"
17                         target="_blank">
18                         <img style="vertical-align: bottom; border: 0px" src="http://wpa.qq.com/pa?p=1:624541997:13"
19                             alt="点击这里给我发消息"></a>
20                     <object classid="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                         <param name="allowScriptAccess" value="always">
23                         <param name="movie" value="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_tr.swf">
24                         <param name="quality" value="high">
25                         <param name="bgcolor" value="#ffffff">
26                         <param name="wmode" value="transparent">
27                         <embed wmode="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                     <div id="profile_block">
32                         昵称:<a href="http://home.cnblogs.com/u/xishuai/">田园里的蟋蟀</a><br>
33                         园龄:<a href="http://home.cnblogs.com/u/xishuai/" title="入园时间:2012-08-07">1年6个月</a><br>
34                         粉丝:<a href="http://home.cnblogs.com/u/xishuai/followers/">137</a><br>
35                         关注:<a href="http://home.cnblogs.com/u/xishuai/followees/">10</a><div id="p_b_follow">
36                         </div>
37                     </div>
38                     <script type="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 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <title></title>
 5     <style type="text/css">
 6         .canfloat
 7         {
 8             position: fixed;
 9             top: 10px;
10         }
11         .newsItem
12         {
13             width: 220px;
14             float: right;
15             padding: 0px 0px 5px;
16             margin-bottom: 2em;
17         }
18         .newsItem .catListTitle
19         {
20             text-align: left;
21             padding: 5px 10px;
22             border: 1px solid #CCC;
23             background: none repeat scroll 0% 0% #F0F0F0;
24         }
25         .catListTitle
26         {
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     <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
37     <script type="text/javascript">
38         $(function () {
39             $(window).scroll(function () {
40                 var ref_min = $("#sign")[0];
41                 if (!ref_min) return;
42                 var scroll_top = $(window).scrollTop();
43                 var ref_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         <div style="height: 2500px; float: left;">
56         </div>
57         <div class="newsItem">
58             <div style="height: 500px;">
59             </div>
60             <div>
61                 我只是占位的
62             </div>
63             <div id="sign" title="我只是记录的">
64             </div>
65             <div id="floatdiv" class="canfloat">
66                 <h3 class="catListTitle">
67                     公告</h3>
68                 <div id="blog-news">
69                     <a style="padding-right: 20px;" href="http://wpa.qq.com/msgrd?v=3&amp;uin=624541997&amp;site=qq&amp;menu=yes"
70                         target="_blank">
71                         <img style="vertical-align: bottom; border: 0px" src="http://wpa.qq.com/pa?p=1:624541997:13"
72                             alt="点击这里给我发消息"></a>
73                     <object classid="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                         <param name="allowScriptAccess" value="always">
76                         <param name="movie" value="http://chabudai.sakura.ne.jp/blogparts/honehoneclock/honehone_clock_tr.swf">
77                         <param name="quality" value="high">
78                         <param name="bgcolor" value="#ffffff">
79                         <param name="wmode" value="transparent">
80                         <embed wmode="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                     <div id="profile_block">
85                         昵称:<a href="http://home.cnblogs.com/u/xishuai/">田园里的蟋蟀</a><br>
86                         园龄:<a href="http://home.cnblogs.com/u/xishuai/" title="入园时间:2012-08-07">1年6个月</a><br>
87                         粉丝:<a href="http://home.cnblogs.com/u/xishuai/followers/">137</a><br>
88                         关注:<a href="http://home.cnblogs.com/u/xishuai/followees/">10</a><div id="p_b_follow">
89                         </div>
90                     </div>
91                     <script type="text/javascript">                        loadBlogNews();</script>
92                 </div>
93             </div>
94         </div>
95     </div>
96 </body>
97 </html>
View Code

  示例下载:scrollTop.rar

 

转载于:https://www.cnblogs.com/xishuai/p/3586708.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HashMap vs ConcurrentHashMap — 示例及Iterator探秘

2019独角兽企业重金招聘Python工程师标准>>> 如果你是一名Java开发人员&#xff0c;我能够确定你肯定知道ConcurrentModificationException&#xff0c;它是在使用迭代器遍历集合对象时修改集合对象造成的&#xff08;并发修改&#xff09;异常。实际上&#xff0c;…

谷歌浏览器跨域报错解决办法

谷歌浏览器跨域报错&#xff1a; 在浏览器属性设置一下就可以了。 最后&#xff0c;先打开浏览器&#xff0c;就可以了。 转载于:https://www.cnblogs.com/fanyun/p/4263363.html

Unable to find the ncurses libraries or the required header files解决

问题&#xff1a; 解决方法: sudo apt-get install ncurses-dev 参考&#xff1a;Unable to find the ncurses libraries or the required header files解决 转载于:https://www.cnblogs.com/amanlikethis/p/3591353.html

iOS自动布局进阶用法

本文主要介绍几个我遇到并总结的相对高级的用法&#xff08;当然啦牛人会觉得这也不算什么&#xff09;。 简单的storyboard中上下左右约束&#xff0c;固定宽高啥的用法在这里就不做赘述了。 autolayout自动布局是iOS6以后出现的&#xff0c;但是在开始的一段时间里大家并不怎…

Windows系统与Linux系统下的硬盘分区操作

以下内容源于网络资源的学习与整理&#xff0c;如有其侵权请告知删除。 之前在uboot中利用fdisk命令对X210开发板的iNand进行分区时&#xff0c; 因为不小心在uboot中利用“fdisk -c 1”&#xff08;1对应着sd卡&#xff0c;0对应着iNand&#xff09;对sd卡也分区了&#xff…

您应该了解的 Windows Azure 网站在线工具

&#xfeff;&#xfeff;编辑人员注释&#xff1a;本文章由Windows Azure 网站团队的软件开发者 Amit Apple 撰写。 如果想要了解并亲身参与计算资源管理&#xff0c;那么您一定会很高兴得知这一消息&#xff1a;Windows Azure 网站现在提供一些非常有用的在线工具&#xff0c…

【自己给自己题目做】:如何在Canvas上实现魔方效果

最终demo -> 3d魔方 体验方法&#xff1a; 浮动鼠标找到合适的位置&#xff0c;按空格键暂停选择要翻转的3*3模块&#xff0c;找到相邻两个正方体&#xff0c;鼠标点击第一个正方体&#xff0c;并且一直保持鼠标按下的状态直到移到第二个正方体后放开&#xff0c;比如下图&…

彻底搞懂硬盘相关的概念

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 硬盘结构&#xff08;机械硬盘和固态硬盘&#xff09;详解 简单理解磁盘结构_Guanngxu的博客-CSDN博客_磁盘的结构 硬盘基础知识_Forskamse的博客-CSDN博客 硬盘知识笔记整理_落子摘星的博客-CSDN…

ubuntu下数据库的导入导出

2019独角兽企业重金招聘Python工程师标准>>> 一.导出远程数据库 例如 sudo mysqldump -h 172.16.1.211 -u haha -p123 -P3307 app>app.sql 二.导入.sql文件的 到数据库 1.create database xxx(创建一个名称是xxx的数据库) 2. use xxx(切换到该数据库下) 3. sou…

MBR分区表的简介

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 &#xff08;1&#xff09;S5PV210 Uboot开发与移植01&#xff1a;Uboot概述_麦兜的学习笔记的博客-CSDN博客 &#xff08;2&#xff09;Linux系统下的硬盘分区、格式化与挂载_天糊土的博客-CSD…

Redis配置文件参数说明

配置文件参数说明: 1. Redis默认不是以守护进程的方式运行&#xff0c;可以通过该配置项修改&#xff0c;使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时&#xff0c;Redis默认会把pid写入/var/run/redis.pid文件&#xff0c;可以通过pidfile指定 pidfile …

movi命令(do_movi函数的源码分析)

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 一、do_movi函数分析 当执行movi相关命令时&#xff0c;实际执行的是do_movi函数。 x210 # help movi movi init - Initialize moviNAND and show card info movi read {u-boot | kernel} {addr} - Read …

[LeetCode]Search Insert Position

原题链接&#xff1a;http://oj.leetcode.com/problems/search-insert-position/ 题意描述&#xff1a; Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order. You …

如何将镜像烧写至iNand(fastboot命令的源码分析)

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 参考博客 u-boot sdfuse命令烧录分析----从SD卡加载内核_white_bugs的博客-CSDN博客 一、将镜像文件烧写至iNand的步骤 步骤1&#xff1a;完成准备工作。 &#xff08;1&#xff09;准备fastboot相关软件包…

你知道自己执行的是哪个jre吗?

多个JRE 我在做《Java日志工具之java.util.logging.Logger》的DEMO时&#xff0c;修改java.util.logging.Logger的配置文件&#xff0c;怎么修改都不起作用&#xff0c;因此打印了系统属性"java.home"&#xff0c;才知道自己使用的是 C:\Program Files\Java\jre7 &am…

无需写try/catch,也能正常处理异常

对于企业应用的开发者来说&#xff0c;异常处理是一件既简单又复杂的事情。说其简单&#xff0c;是因为相关的编程无外乎try/catch/finallythrow而已&#xff1b;说其复杂&#xff0c;是因为我们往往很难按照我们真正需要的策略来处理异常。我一直有这样的想法&#xff0c;理想…

vs2010插件

转载于:https://www.cnblogs.com/tinytiny/p/3608030.html

leetcode1——两数之和

一、提出问题 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按…

如何脱离SDK,使用DW5.5和phonegap以及JQMobile搭建开发环境

也许有些人是学C出身&#xff0c;对于Java几乎不了解。一时心血来潮想学学android开发&#xff0c;于是下载了Eclipse&#xff0c;安装了SDK&#xff0c;有模有样的学习起来。也许是懒惰了&#xff0c;对于java一直总是提不起精神。于是确定使用DreamweaverJquery mobilePhoneg…

leetcode2——两数相加

一、提出问题 给你两个非空的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照逆序的方式存储的&#xff0c;并且每个节点只能存储一位数字。请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以…