实现回到顶部按钮,需要考虑几个细节:
1. 回到顶部的速度计算
2. 定时器需要关闭,不关闭会导致不停的执行回到顶部的事件
3. 回到顶部事件未结束,用户进行滚动页面,应该关闭定时器
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
#btn1{
position: fixed
bottom: 0
right: 0
}
</style>
<script>
window.onload = function(){
var oBtn=document.getElementById('btn1')
//用处,避免当按钮触发页面回到顶部时页面滚动这个过程未结束,用户此时人为滚动时页面不会准确响应用户
var bSys = true
var timer = null
window.onscroll = function(){
//当认为滚动页面,关闭定时器
if(!bSys){
clearInterval(timer)
}
bSys = false
}
oBtn.onclick = function()
{
//每30ms执行一次 scrollTop+iSpeed
timer = setInterval(function(){
var scrollTop=document.documentElement.scrollTop || document.body.scrollTop
//算速度 除以的数值越大,速度越慢
var iSpeed=Math.floor(0-scrollTop/5)
if(scrollTop == 0){
//不关闭定时器,会导致第一次回到顶部之后,导致不能在响应用户的滚动,不定的触发回到顶部,by三人行慕课
clearInterval(timer)
}
//当按钮启动页面滚动,设置为true
bSys=true
document.documentElement.scrollTop=document.body.scrollTop=scrollTop+iSpeed
}, 30)
}
}
</script>
</head>
<body style='height:2000px'>
<input type="button" id="btn1" value="回到顶部" />
</body>
</html>
第一种
/*** JavaScript脚本实现回到页面顶部示例
* @param acceleration 速度
* @param stime 时间间隔 (毫秒)
**/
function gotoTop(acceleration,stime) {
acceleration = acceleration || 0.1
stime = stime || 10
var x1 = 0
var y1 = 0
var x2 = 0
var y2 = 0
var x3 = 0
var y3 = 0
if (document.documentElement) {
x1 = document.documentElement.scrollLeft || 0
y1 = document.documentElement.scrollTop || 0
}
if (document.body) {
x2 = document.body.scrollLeft || 0
y2 = document.body.scrollTop || 0
}
var x3 = window.scrollX || 0
var y3 = window.scrollY || 0
// 滚动条到页面顶部的水平距离
var x = Math.max(x1, Math.max(x2, x3))
// 滚动条到页面顶部的垂直距离
var y = Math.max(y1, Math.max(y2, y3))
// 滚动距离 = 目前距离 / 速度, 因为距离原来越小, 速度是大于 1 的数, 所以滚动距离会越来越小
var speeding = 1 + acceleration
window.scrollTo(Math.floor(x / speeding), Math.floor(y / speeding))
// 如果距离不为零, 继续调用函数
if(x &gt 0 || y &gt 0) {
var run = "gotoTop(" + acceleration + ", " + stime + ")"
window.setTimeout(run, stime)
}
}
第二种
function pageScroll() {window.scrollBy(0,-10)
scrolldelay = setTimeout('pageScroll()',100)
}
/*
scrollBy() 方法可把内容滚动指定的像素数。
语法
scrollBy(xnum,ynum)
参数描述
xnum 必需。把文档向右滚动的像素数。
ynum 必需。把文档向下滚动的像素数。
8?