原生js实现返回顶部缓冲效果


Posted in Javascript onJanuary 18, 2017

运行原理

通过定时器30毫秒执行一次滚动条上升,每次上升的高度为当前高度的80%,这样就达到了上升缓冲的动画效果。

判断当滚动条高度超过一屏时,按钮显示,默认隐藏

知识要点

scrollTop//获取滚动条高度 需要写兼容
clientHeight//可视窗口高度 需要写兼容
setInterval//定时器
window.onscroll//滚动触发事件

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>demo</title>
<style>
body,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,form,fieldset,legend,button,input,textarea,th,td{margin:0;padding:0;}
h1,h2,h3,h4,h5,h6{font-size:100%;}
address,cite,dfn,em,var{font-style:normal;}
code,kbd,pre,samp{font-family:courier new,courier,monospace;}
ul,ol{list-style:none;}
a{text-decoration:none;}
a:hover{text-decoration:none;}
sup{vertical-align:text-top;}
sub{vertical-align:text-bottom;}
legend{color:#000;}
fieldset,img{border:0;}
button,input,select,textarea{font-size:100%;}
table{border-collapse:collapse;border-spacing:0;}
.clear{clear: both;float: none;height: 0;overflow: hidden;}
.bg{background:#9B1BC5; width: 1000px; height: 3000px; margin: 0 auto;}
#gotop{width: 50px; height: 50px; background:#5490F5; color: #fff; position: fixed; left: 50%; bottom: 30px; text-align: center; font-family: "Microsoft Yahei",tahoma,arial; font-size: 14px; cursor: pointer; margin-left: 520px; display: none;}
#gotop span{display: block;padding: 5px;}
</style>
</head>
<body>
<div class="bg"></div>
<div id="gotop"><span>返回顶部</span></div>
<script type="text/javascript">
 //在页面加载完后立即执行多个函数方案
 function addloadEvent(func){
  var oldonload=window.onload;
  if(typeof window.onload !="function"){
   window.onload=func;
  }
  else{
   window.onload=function(){
    if(oldonload){
     oldonload(); 
    }
    func();
   }
  }
 }
 //在页面加载完后立即执行多个函数方案结束
 addloadEvent(b);
 function b(){
  var gotop=document.getElementById("gotop");  
  var timer;
  var tf=true;
  //滚动触发
  window.onscroll=function(){
   //获取滚动条高度
   var ostop=document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
   //获取窗口可视区域高度
   //console.log(ostop)
   var ch=document.documentElement.clientHeight||document.body.clientHeight;
   //如果页面超过一屏高度按钮显示,否则隐藏
   if(ostop>=ch){
    gotop.style.display="block";
   }else{
    gotop.style.display="none";
   }
   //
   if(!tf){
    clearInterval(timer);    
   }
    tf=false;
  }
  //点击触发
  gotop.onclick=function(){
   //创建定时器
   timer=setInterval(function(){
    //获取滚动条高度
    var ostop=document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop;
    //每次上升高度的20%
    var speed=Math.ceil(ostop/5);
    //每次上升当前高度的80%
document.documentElement.scrollTop=document.body.scrollTop=ostop-speed;
    //如果高度为0,清除定时器
    if(ostop==0){
     clearInterval(timer);
    } 
    tf=true;
   },30);   
  }
 }
</script>
</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
有关DOM元素与事件的3个谜题
Nov 11 Javascript
JavaScript和CSS交互的方法汇总
Dec 02 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
JavaScript引用类型和基本类型详解
Jan 06 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
Oct 01 Javascript
超全面的JavaScript开发规范(推荐)
Jan 21 Javascript
jQuery弹出窗口简单实现代码
Mar 09 Javascript
js如何获取图片url的Blob值并预览示例代码
Mar 07 Javascript
JS事件流与事件处理程序实例分析
Aug 16 Javascript
Vue js with语句原理及用法解析
Sep 03 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
webpack的移动端适配方案小结
Jul 25 Javascript
详解jquery validate实现表单验证 (正则表达式)
Jan 18 #Javascript
原生js实现中奖信息无间隙滚动效果
Jan 18 #Javascript
js实现简单的网页换肤效果
Jan 18 #Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
Jan 18 #Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
Jan 18 #Javascript
jQuery Masonry瀑布流插件使用方法详解
Jan 18 #Javascript
js实现消息滚动效果
Jan 18 #Javascript
You might like
elgg 获取文件图标地址的方法
2010/03/20 PHP
php数据结构与算法(PHP描述) 查找与二分法查找
2012/06/21 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
php微信公众平台示例代码分析(二)
2016/12/06 PHP
PHP中仿制 ecshop验证码实例
2017/01/06 PHP
YUI的Tab切换实现代码
2010/04/11 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
AngularJS入门之动画
2016/07/27 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
解决Vue在Tomcat8下部署页面不加载的问题
2019/11/12 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
Vue项目打包压缩的实现(让页面更快响应)
2020/03/10 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
自我评价怎么写好呢?
2013/12/05 职场文书
先进个人获奖感言
2014/01/24 职场文书
计算机毕业大学生求职信
2014/06/26 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
幼儿园中班教师个人总结
2015/02/05 职场文书
幽灵公主观后感
2015/06/09 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python