js之滚动置顶效果
0、js获取高度
|
1
2
3
4
5
6
|
document.all // 只有ie认识document.body.clientHeight // 文档的高,屏幕的文档区域的高documemt.documentElement.clientHeight // 有效的高,屏幕可视的高document.documentElement.scrollHeight // 屏幕的总高度document.documentElement.scrollTop // 滚动的高 |
1、首先,我们需要图片的支持,至少需要一张“置顶”的图片

2、然后,到网上找一张比较大的图片,到时直接多放几张到网页上就可模拟页面可滚动效果
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
<html><head> <style type="text/css"> #scroll { width: 62px; height: 50px; right: 50px; bottom: 50px; display: none; cursor: pointer; position: fixed; background: url("goTop.png"); } </style></head><body> <div> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> <img src="tangwei.jpg" /> </div> <div id="scroll"></div></body><script type="text/javascript"> // 获取置顶对象 var obj = document.getElementById('scroll'); // 置顶对象点击事件 obj.onclick = function() { var timer = setInterval(function() { window.scrollBy(0, -50); if (document.body.scrollTop == 0) { clearInterval(timer); }; }, 2); } // 窗口滚动检测 window.onscroll = function() { obj.style.display = (document.body.scrollTop >= 300) ? "block" : "none"; }</script></html> |
3、代码不多也不难,耐心一点都可以读懂,不规范的请忽略,效果图如下:

4、后来发现了几个问题
ie6不支持 position:fixed; 所以置顶的图片会一直位于最底部;
按钮点击后,有些浏览器会有滚动置顶功能(谷歌,360,Opera等),而有些浏览器不支持 document.body.scrollTop(火狐,IE,Safari)
5、于是尝试解决,第一种问题可以直接用样式 css 来,而第二种则需要用 js,先来解决第一种,在网上有很多答案:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
*html{ background-image:url(about:blank); background-attachment:fixed;}#scroll { width: 62px; height: 50px; right: 50px; bottom: 50px; cursor: pointer; position: fixed; display: none; background: url("goTop.png"); /* 兼容ie6位置fixed问题 */ _position:absolute; _bottom:auto; /*_top:expression(eval(document.documentElement.scrollTop));*/ _top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0))); _margin-bottom: 40px;} |
你会发现有下划线都是用来兼容 ie6 的,因为只有 ie6 不支持 position:fixed;
将元素固定在浏览器顶部用:
|
1
|
_top:expression(eval(document.documentElement.scrollTop)); |
将元素固定在浏览器底部用:
|
1
|
_top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0))); |
然后你再用 _margin-top:10px; 或 _margin-bottom:10px; 来修改位置。
6、第二种则是需要用到 js:
主要是滚动的高度在浏览器之间支持问题, document.body.scrollTop
因为: document.body.scrollTop 主要是谷歌浏览器,360浏览器,没DOCTYPE的ie等支持
document.documentElement.scrollTop 则是火狐浏览器,有DOCTYPE的ie浏览器支持
最麻烦的是苹果的Safari 竟然只对window.pageYOffset支持
于是可写成这样:
|
1
|
var scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; |
7、整体的全部js代码是这样的:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<script type="text/javascript"> // 获取置顶对象 var obj = document.getElementById('scroll'); var scrollTop = null; // 置顶对象点击事件 obj.onclick = function() { var timer = setInterval(function() { window.scrollBy(0, -100); if (scrollTop == 0) clearInterval(timer); }, 2); } // 窗口滚动检测 window.onscroll = function() { scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; obj.style.display = (scrollTop >= 300) ? "block" : "none"; }</script> |
js之滚动置顶效果的更多相关文章
- 源生js惯性滚动与回弹效果
在写移动端的APP或者页面时,经常会遇到惯性滚动与回弹效果.用插件iscroll可以轻松解决这个问题,大多数的移动框架也能轻松解决这个问题,它们内部都封装了这个效果. 一直好奇这个效果原生JS是怎么实 ...
- Android ListView标题置顶效果实现
一. 有图有真相 二.实现: 1. 基于ListView分类效果 2. TitleView即标题的处理(创建) 3. 处理TitleView的三种状态 三.源码: 例子下载 实现可以看代码,具 ...
- js 上下滚动加停顿效果,js 跑马灯加停顿效果
<div id="middle"> <ul id="slide1"> <li>尾号1183的用户刚刚领取了 78.23元 的 ...
- js实现div吸顶效果
<script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script> < ...
- javascript平时小例子⑧(导航置顶效果)
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- vue 通过自定义指令实现 置顶操作;
项目需求:要求当前项目每个页面滑到超出一屏的距离时,出现 backTop 按钮,点击则回到最顶端:俗称置顶操作: 因为涉及到的页面较多,每个页面都加肯定显得重复累赘,最终想到了 Vue 的自定义指令 ...
- WinFrom窗体始终置顶
调用WindowsAPI使窗体始终保持置顶效果,不被其他窗体遮盖: [DllImport("user32.dll", CharSet = CharSet.Auto)] privat ...
- iOS UILabel 文字 置顶/置底 实现
iOS UILabel控件默认文字位置是居中的,如图所示: 但是我们经常碰到这样的需求,希望文字向上置顶,或者向下置底,但是很遗憾,iOS API中并没有提供相应的属性和方法,需要我们手动设置. 利用 ...
- Qt::QWindow多窗口争抢置顶状态解决方案
有时候我们会有这种需求,自己的桌面程序需要置顶,但是程序包含了很多窗口,可能我们要求窗口1,2都在其它桌面程序之上,但是窗口1必须随时在窗口2之上. Qt提供的置顶方式是在windowsflags上增 ...
随机推荐
- win32 COM组件编写
win32的com组件: 1. 编辑idl,idl文件会生成对应的com class和com interface,例如 [ object, uuid(xxxxxxxx-xxxx-xxxx-xxxx-x ...
- Winodow Server Backup学习向导-window 2008
1.安装Window Server Backup 2.备份服务器 3.恢复服务器 4.优化和备份服务器性能 Windows Server Backup 中的新增功能有哪些? Windows Serve ...
- Android服务开机自启动
新任务需要Android程序开机跑一个服务,查找资料得出如下方法: 用广播的方法监听系统启动事件:android.intent.action.BOOT_COMPLETED 并在AndroidManif ...
- 运维自动化工具---Puppet
案例环境:-----------------------------------------------------------------主机 操作系统 IP地址 主要软件--------- ...
- Manhattan distance(for lab)
Input four integer x1, y1, x2, y2, which is mean that the coordinates of two points A(x1, y1), B(x2, ...
- 影响Java EE性能的十大问题(转)
本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE.中间件和JVM技术.他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题 ...
- IOS 获取当前对象所在的VC
id next = [self nextResponder] ; while (next != nil) { next = [next nextResponder]; if ([next isKind ...
- slot游戏中的数学概念
最近研究slot 算法,看了大量的英文资料,因为母语中文,一直使用中文的英文小白来说,好心塞,悔不当初没学好英文. 下文是从众多的英文中摘录的唯一能够看明白的概念.先给自己留着,到时候深入研究可以看 ...
- MySQL JDBC 出现多个 SHOW VARIABLES 语句。
一次偶然的机会,show processlist 的时候,发现有个 Client 一直在执行 "mysql-connector-java-5.1.21 ( Revision: ${bzr. ...
- 2016,Raym
Hello,2016: 这是承上启下的一年! Raym