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中对数组进行操作的方法
Apr 16 Javascript
jQuery中:enabled选择器用法实例
Jan 04 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
纯js代码实现未知宽高的元素在指定元素中垂直水平居中显示
Sep 12 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
Sep 14 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
Oct 14 Javascript
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
其实你可以少写点if else与switch(推荐)
Jan 10 Javascript
Vue路由模块化配置的完整步骤
Aug 14 Javascript
防止Layui form表单重复提交的实现方法
Sep 10 Javascript
在vue中使用echarts(折线图的demo,markline用法)
Jul 20 Javascript
Rust中的Struct使用示例详解
Aug 14 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
NOT NULL 和NULL
2007/01/15 PHP
PHP HTML代码串 截取实现代码
2009/06/29 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
浅析THINKPHP的addAll支持的最大数据量
2015/02/03 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
给页面渲染时间加速 干掉Dom Level 0 Event
2012/12/19 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
jQuery之折叠面板的深入解析
2013/06/19 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
使用JS画图之点、线、面
2015/01/12 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
解决vue热替换失效的根本原因
2018/09/19 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
js图片无缝滚动插件使用详解
2020/05/26 Javascript
Vue使用Clipboard.JS在h5页面中复制内容实例详解
2019/09/03 Javascript
JavaScript 中的无穷数(Infinity)详解
2020/02/13 Javascript
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
python的random模块及加权随机算法的python实现方法
2017/01/04 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
初中生物教学反思
2014/01/10 职场文书
搞笑创意广告语
2014/03/17 职场文书
《荷花》教学反思
2014/04/16 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
法制工作总结2015
2015/07/23 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers