用Javascript实现回到顶部效果javascript
常常看到网页中有回到顶部的效果,今天也研究一下回到顶部有哪些方法。众所周知,用锚连接是实现回到最简单的方法,可是从用户体验效果来讲,并非最好的。(锚连接回到顶部时太快了,并且用户可能在看到某个感兴趣的东西想停下来,却停不下来),针对上面的缺点,咱们试着用Javascript的方法来获得实现。思路是这个样子的:css
一、首先用html和css构建基本的例子,代码以下html
html部分: <div class="box"> <img src="1.jpg"/> </div> <a href="javascript:;" id="btn" title="回到顶部"></a> css部分: .box { width: 1190px; margin: 0 auto; } #btn{ width: 40px; height: 40px; background-color: red; position: fixed; right: 0px; bottom: 60px; background: url(2.jpg) no-repeat left top; } #btn:hover{ background: url(2.jpg) no-repeat left -40px; }
在这里应该注意的是:href="javascript:;"的目的是为了阻止浏览器默认行为。java
二、下面咱们就能够用Javascript来控制咱们的例子浏览器
a、首先模仿锚连接回到顶部的效果,代码以下:函数
window.onload = function(){ var obtn = document.getElementById('btn'); obtn.onclick = function(){ var osTop = document.documentElement.scrollTop || document.body.scrollTop; document.documentElement.scrollTop = document.body.scrollTop = -200; }; }
这里的效果为,鼠标每点击一次,向上移动200像素(200像素是能够变化的),而后咱们发现每次都要点击以为很麻烦,这里咱们不妨为它添加一个定时器函数url
b、添加定时器函数,代码以下:spa
var timer = null;//在前面声明 timer = setInterval(function(){},30);//里面接的是移动200px效果
在这里,咱们以为还不是那么的好,好比说“别人家”的效果距离顶部越近的时候,速度越慢;而且咱们中间还有一个问题就是回到顶部以后,在想继续往下看时不会继续往下了。htm
c、清除定时器效果并控制回到顶部的速率,代码以下:blog
//改变回到顶部的速度 var isSpeed = Math.floor(-osTop/6) document.documentElement.scrollTop = document.body.scrollTop = osTop + isSpeed; //清除定时器效果 if(osTop == 0){ clearInterval(timer); }
到这里,咱们的效果差很少完成了,可是仍是不能在滚动条滚动的时候,看到感兴趣的内容停下来。
d、滚动条滚动即停,代码以下:
var isTop = true;//先声明 //滚动条滚动时触发 window.onscroll = function(){ if(!isTop){ clearInterval(timer); } isTop = false; }; isTop = true;//添加在obtn.onclick事件的timer中
到这里,咱们还有一点小小的地方能够改动,就是当在可视窗口中,回到顶部是不出现的,到达必定值后才出现
e、回到顶部的显示与隐藏,代码以下:
/*在css中添加以下代码:*/ #btn{display: none;} //获取页面的可视窗口高度 var clientHeight = document.documentElement.clientHeight || document.body.clientHeight; /*在window.onscroll中添加以下代码,控制显示与隐藏*/ //在滚动的时候增长判断 var osTop = document.documentElement.scrollTop || document.body.scrollTop;//特别注意这句,忘了的话很容易出错 if (osTop >= clientHeight) { obtn.style.display = 'block'; }else{ obtn.style.display = 'none'; }
这样,回到顶部的效果就实现了,咱们在看下完整的代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Javascript 回到顶部效果</title> <style type="text/css"> #btn { width: 40px; height: 40px; position: fixed; display: none; right: 0px; bottom: 30px; background: url(2.jpg) no-repeat left top; } #btn:hover { background: url(2.jpg) no-repeat 0 -40px; } .box { width: 1190px; margin: 0 auto; } </style> </head> <body> <div class="box"> <img src="1.jpg" /> </div> <a href="javascript:;" id="btn" title="回到顶部"></a> <script type="text/javascript"> window.onload = function() { var obtn = document.getElementById('btn'); var timer = null; var isTop = true; //获取页面的可视窗口高度 var clientHeight = document.documentElement.clientHeight || document.body.clientHeight; //滚动条滚动时触发 window.onscroll = function(){ //在滚动的时候增长判断 var osTop = document.documentElement.scrollTop || document.body.scrollTop;//特别注意这句,忘了的话很容易出错 if (osTop >= clientHeight) { obtn.style.display = 'block'; }else{ obtn.style.display = 'none'; } if (!isTop) { clearInterval(timer); } isTop = false; }; btn.onclick = function(){ //设置定时器 timer = setInterval(function(){ //获取滚动条距离顶部的高度 var osTop = document.documentElement.scrollTop || document.body.scrollTop; //同时兼容了ie和Chrome浏览器 //减少的速度 var isSpeed = Math.floor(-osTop / 6); document.documentElement.scrollTop = document.body.scrollTop = osTop + isSpeed; //console.log( osTop + isSpeed); isTop = true; //判断,而后清除定时器 if (osTop == 0) { clearInterval(timer); } },30); }; } </script> </body> </html>
到这里,还要小结一下,在中间咱们运用的知识点:
知识点回顾: DOM: 一、document.getElementById() 二、document.documentElement.scrollTop 三、document.body.scrollTop 事件: 一、window.onload 二、window.onscroll 三、obtn.onclick 定时器的使用: 一、setInterval(function(){},30) 二、clearInterval(timer)