js要怎么实现回到顶部?

JavaScript015

js要怎么实现回到顶部?,第1张

回到顶部按钮的实现基本思想很简单,就是修改页面的scrollTop,难点就是去计算scrollTop。

实现回到顶部按钮,需要考虑几个细节:

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?