原生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 弹出窗口中是否显示地址栏的实现代码
Apr 14 Javascript
模拟select的代码
Oct 19 Javascript
利用webqq协议使用python登录qq发消息源码参考
Apr 08 Javascript
jquery实现勾选复选框触发事件给input赋值
Feb 01 Javascript
javascript实现控制的多级下拉菜单
Jul 05 Javascript
全面解析Bootstrap手风琴效果
Apr 17 Javascript
jQuery中通过ajax的get()函数读取页面的方法
Feb 29 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
Aug 16 Javascript
vue框架搭建之axios使用教程
Jul 11 Javascript
微信小程序scroll-view实现字幕滚动
Jul 14 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
Aug 30 Javascript
详解vue或uni-app的跨域问题解决方案
Feb 21 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
上海地方志办公室-上海电子仪表工业志
2021/03/04 无线电
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
如何让动态插入的javascript脚本代码跑起来。
2007/01/09 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
我的Node.js学习之路(一)
2014/07/06 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
JavaScript检测并限制复选框选中个数的方法
2015/08/12 Javascript
JavaScript中字面量与函数的基本使用知识
2015/10/20 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
简单的vue-resourse获取json并应用到模板示例
2017/02/10 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
three.js中文文档学习之通过模块导入
2017/11/20 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
python实现的简单猜数字游戏
2015/04/04 Python
Python环境变量设置方法
2016/08/28 Python
Python使用当前时间、随机数产生一个唯一数字的方法
2017/09/18 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
.NET面试10题
2014/02/24 面试题
经济信息管理专业大学生求职信
2013/09/27 职场文书
单位委托书范本
2014/04/04 职场文书
公司户外活动总结
2014/07/04 职场文书
入党现实表现材料
2014/12/23 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python