js浏览器滚动条卷去的高度scrolltop(实例讲解)


Posted in Javascript onJuly 07, 2017

1、之前我们学习的JS盒子模型中:client系列/offset系列/scrollWidth/scrollHeight都是“只读”的属性-> 只能通过属性获取值,不能通过属性修改元素的样式

2、scrollTop/scrollLeft:滚动条卷去的高度/宽度(这两个属性是唯一“可读写”的属性)

box.scrollTop = 0 // 直接回到容器的顶部

我们的scrollTop的值是存在边界值(最大和最小值),我们设置的值比最小值小或者比最大值大都没用,起到效果的依然是边界的值

[最小值是零]

box.scrollTop = -1000;// 直接回到了容器的顶部,没有超出

console.log(box.scrollTop) //0

[最大值 = 真实的高度-当前容器一屏幕的高度]

var maxTop = box.scrollHeight - box.clientHeight;

scrollTop最经典的应用就是回到顶部,下面代码如下: 

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    *{
      padding:0;
      margin:0;
    }
    html,body{
      width:100%;
      height:1000%;
      background:#11c900;
    }
    a{
      text-decoration: none;
      color:#000;

    }
  </style>
</head>
<body>
<a href="javascript:" rel="external nofollow" id="goLink">GO</a>
//A标签本身是跳转页面的,把跳转的地址写在href这个属性中
/*
  1)、不写值的话是刷新本页面
  2)、写的如果是#target,是锚点定位,定位到当前页面Id为target这个位置
  3)、“javascript:”这样写是取消A标签默认跳转的行为
*/
<script>
  var goLink =document.getElementById("goLink");
  /*
    回到顶部:
    总时间(duration):500ms 
    频率(interval):多长时间走一步 10ms 
    总距离(target): 当前的位置(当前的scrollTop)- 目标的位置(0)
    步长(step):每一次走得距离  (target/duration)*interval 
  */


  /*
    这个代码是可以优化的:
    开始GO按钮是不显示的,当滚动到一定的距离之后,才显示,反之隐藏 只要浏览器的滚动条在滚动,我们就需要判断GO显示还是隐藏
    浏览器的滚动条滚动:拖动滚动条、鼠标滚轮、键盘上下键、pageDown/pageUp键、点击滚动条的空白区域或者箭头(自主操作的行为)...我们还可以通过js控制scrollTop的值来实现滚动条的滚动
  */

  window.onscroll = function computedDisplay(){//不管怎么操作的,只要滚动条动了就会触发这个行为
    var curTop = document.documentElement.scrollTop || document.body.scrollTop;
    var curHeight = document.documentElement.clientHeight || document.body.clientHeight;
    if(curTop>=clientHeight){
      goLink.style.display = "block"
    }else{
      goLink.style.display = "none"
    }

  }
  goLink.onclick = function(){
    this.style.display = "none";//并不会消失,因为我们滚动条往回走的时候 又会触发onscroll事件,又会进行显示
    window.onscroll = null;
    var duration = 500,interval=10,target=document.documentElement.scrollTop || document.body.scrollTop;
    var step = (target/duration)*interval;

    var timer = window.setInterval(function(){
      var curTop = document.documentElement.scrollTop || document.body.scrollTop;
      if(curTop===0){
        window.clearInterval(timer);
        window.onscroll = computedDisplay;
        //当动画结束后把对应的方法重新绑定给window.onscroll
        return;
      }
      curTop-=step
      document.documentElement.scrollTop = curTop;
      document.body.scrollTop = curTop;
    },interval)
    // document.documentElement.scrollTop = 0;
    // document.body.scrollTop = 0;
  }
</script>
</body>
</html>

以上这篇js浏览器滚动条卷去的高度scrolltop(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
Apr 10 Javascript
js实现进度条的方法
Feb 13 Javascript
JavaScript中getUTCMinutes()方法的使用详解
Jun 10 Javascript
javascript每日必学之多态
Feb 23 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
Mar 02 Javascript
Bootstrap模态框插件使用详解
May 11 Javascript
vue 实现axios拦截、页面跳转和token 验证
Jul 17 Javascript
微信小程序云开发详细教程
May 16 Javascript
js实现固定区域内的不重叠随机圆
Oct 24 Javascript
原生js+canvas实现验证码
Nov 29 Javascript
JS代码实现页面切换效果
Jan 10 Javascript
node.js如何自定义实现一个EventEmitter
Jul 16 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
Jul 07 #Javascript
基于rem的移动端响应式适配方案(详解)
Jul 07 #Javascript
详谈js模块化规范
Jul 07 #Javascript
使用JavaScript实现alert的实例代码
Jul 06 #Javascript
vuejs手把手教你写一个完整的购物车实例代码
Jul 06 #Javascript
Vue axios 中提交表单数据(含上传文件)
Jul 06 #Javascript
解决webpack打包速度慢的解决办法汇总
Jul 06 #Javascript
You might like
给多个地址发邮件的类
2006/10/09 PHP
使用PHP 5.0创建图形的巧妙方法
2010/10/12 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
JavaScript CSS修改学习第二章 样式
2010/02/19 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
纯javascript模仿微信打飞机小游戏
2015/08/20 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
jQuery实现简单的回到顶部totop功能示例
2017/10/16 jQuery
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
[01:45]2014DOTA2 TI预选赛预选赛 战前探营!
2014/05/21 DOTA
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
Python实现SMTP发送邮件详细教程
2021/03/02 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
python pandas 对时间序列文件处理的实例
2018/06/22 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
高中班长自我鉴定
2013/12/20 职场文书
计算机专业求职信
2014/06/02 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
四年级学生期末评语
2014/12/26 职场文书
自愿离婚协议书范本
2015/01/26 职场文书
绿色环保倡议书
2015/04/28 职场文书
社区安置帮教工作总结2015
2015/05/20 职场文书
数据分析数据库ClickHouse在大数据领域应用实践
2022/04/03 MySQL