博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js之滚动置顶效果
阅读量:7103 次
发布时间:2019-06-28

本文共 4358 字,大约阅读时间需要 14 分钟。

http://my.oschina.net/cobish/blog/300626

//不滚动// 获取置顶对象var scrollTop = null;// 置顶对象点击事件$("a[name=cru_top]").bind("click",function() {document.documentElement.scrollTop= window.pageYOffset = document.body.scrollTop = 0;/*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;$("a[name=cru_top]").css("display",(scrollTop >= 300) ? "block" : "none");};

 

 

 

 

 

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、后来发现了几个问题

  1. ie6不支持 position:fixed; 所以置顶的图片会一直位于最底部;

  2. 按钮点击后,有些浏览器会有滚动置顶功能(谷歌,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>

 

转载于:https://www.cnblogs.com/jcz1206/p/4548774.html

你可能感兴趣的文章
Microsoft Hyper-V Server 2012开启虚拟化-虚拟机管理
查看>>
Linux下Oracle设置环境变量
查看>>
VBScript的字符串方法
查看>>
C和汇编调用一例
查看>>
分享:TokuDB v7 发布,并宣布全面开源
查看>>
系统工具技术选择 – 我们为什么不选择Puppet?
查看>>
ZOJ-2788 Panic Room 最小割
查看>>
hdu 1175:连连看(dfs 深度优先搜索)
查看>>
模式浏览器火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题...
查看>>
Oracle Class9. 数据库触发器和内置程序包
查看>>
视频转发GB 28181 视频代理网关功能及基本原理一
查看>>
远程桌面连接的安装和设置
查看>>
AVD崩溃问题解决
查看>>
sencha touch 监控 Carousel 旋转事件
查看>>
document.readyState和document.DOMContentLoaded判断DOM的加载完成
查看>>
2013年度中国优秀开源项目入围奖
查看>>
ural1517后缀数组
查看>>
函数sql黑马程序员——SQL常用函数
查看>>
thinkphp 前台html调用函数 格式化输出
查看>>
jquery 选择器大全
查看>>