原生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 相关文章推荐
JavaScript实现Sleep函数的代码
Mar 04 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
Jan 10 Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 Javascript
jQuery中extend函数的实现原理详解
Feb 03 Javascript
javascript图片预加载完整实例
Dec 10 Javascript
AngularJS中如何使用echart插件示例详解
Oct 26 Javascript
如何使用VuePress搭建一个类型element ui文档
Feb 14 Javascript
微信小程序实现时间进度条功能
Nov 17 Javascript
React 父子组件通信的实现方法
Dec 05 Javascript
详解Vue之计算属性
Jun 20 Javascript
React中的Context应用场景分析
Jun 11 Javascript
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
详解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创建桌面快捷方式的实例代码
2014/02/17 PHP
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
Jquery 表格合并的问题分享
2011/09/17 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
vue 2.0封装model组件的方法
2017/08/03 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【圆形情况】
2018/12/13 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
零基础学Python(一)Python环境安装
2014/08/20 Python
Python 控制终端输出文字的实例
2019/07/12 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
python实现视频压缩功能
2020/12/18 Python
French Connection官网:女装、男装及家居用品
2019/03/18 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
生物化工专业个人自荐信
2013/09/26 职场文书
建筑专业自我鉴定
2013/10/22 职场文书
《春笋》教学反思
2014/04/15 职场文书
期末学生评语大全
2014/04/24 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
党性观念心得体会
2014/09/03 职场文书
班级光棍节联谊会策划书
2014/10/10 职场文书
起诉意见书范文
2015/05/19 职场文书
go 实现简易端口扫描的示例
2021/05/22 Golang