原生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 相关文章推荐
Mootools 1.2教程 定时器和哈希简介
Sep 15 Javascript
jQuery中获取checkbox选中项等操作及注意事项
Nov 24 Javascript
JS实现带提示的星级评分效果完整实例
Oct 30 Javascript
基于jquery编写分页插件
Mar 07 Javascript
JSON 对象未定义错误的解决方法
Sep 29 Javascript
关于微信上网页图片点击全屏放大效果
Dec 19 Javascript
JavaScript利用闭包实现模块化
Jan 13 Javascript
解决vue中post方式提交数据后台无法接收的问题
Aug 11 Javascript
JavaScript函数的特性与应用实践深入详解
Dec 30 Javascript
在Create React App中使用CSS Modules的方法示例
Jan 15 Javascript
layui插件表单验证提交触发提交的例子
Sep 09 Javascript
浅谈JSON5解决了JSON的两大痛点
Dec 14 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查询数据库中满足条件的记录条数(两种实现方法)
2013/01/29 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
IE与FireFox的JavaScript兼容问题解决办法
2013/12/31 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
jQuery中outerWidth()方法用法实例
2015/01/19 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
详解如何在JS代码中消灭for循环
2019/12/11 Javascript
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
2020/03/08 Javascript
详解React 元素渲染
2020/07/07 Javascript
[04:42]2015国际邀请赛CDEC战队晋级之路
2015/08/13 DOTA
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
python 写的一个爬虫程序源码
2016/02/28 Python
Python连接DB2数据库
2016/08/27 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
美国迪克体育用品商店:DICK’S Sporting Goods
2018/07/24 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
森林防火标语
2014/06/23 职场文书
教师四风自我剖析材料
2014/09/30 职场文书
民间个人借款协议书
2014/09/30 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
经典搞笑版检讨书
2015/02/19 职场文书