原生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 相关文章推荐
createElement动态创建HTML对象脚本代码
Nov 24 Javascript
JavaScript中变量提升 Hoisting
Jul 03 Javascript
js正则表达式的使用详解
Jul 09 Javascript
js控制鼠标事件移动及移出效果显示
Oct 19 Javascript
javascript求日期差的方法
Mar 02 Javascript
AngularJS模块详解及示例代码
Aug 17 Javascript
简易的JS计算器实现代码
Oct 18 Javascript
解决webpack打包速度慢的解决办法汇总
Jul 06 Javascript
深入理解ES6 Promise 扩展always方法
Sep 26 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
Sep 04 Javascript
jQuery实现html可联动的百分比进度条
Mar 26 jQuery
WebPack工具运行原理及入门教程
Dec 02 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
php写的AES加密解密类分享
2014/06/20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
2014/06/30 PHP
PHP获取文件行数的方法
2015/06/10 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
jQuery实现的tab标签切换效果示例
2016/09/05 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
JS 组件系列之BootstrapTable的treegrid功能
2017/06/16 Javascript
NodeJs form-data格式传输文件的方法
2017/12/13 NodeJs
对Angular中单向数据流的深入理解
2018/03/31 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
JavaScript函数节流和函数去抖知识点学习
2018/07/31 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
重命名批处理python脚本
2013/04/05 Python
python黑魔法之参数传递
2016/02/12 Python
Python MD5加密实例详解
2017/08/02 Python
python反编译学习之字节码详解
2019/05/19 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
采购员岗位职责
2013/11/15 职场文书
高一物理教学反思
2014/01/24 职场文书
护理不良事件检讨书
2014/02/06 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
10的分与合教学反思
2014/04/30 职场文书
运动会演讲稿100字
2014/08/25 职场文书
数学教师个人工作总结
2015/02/06 职场文书
公司档案管理制度
2015/08/05 职场文书
入团申请书格式
2019/06/20 职场文书