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对象数据缓存Cache原理以及jQuery.data详解
Apr 07 Javascript
JQuery的AJAX实现文件下载的小例子
May 15 Javascript
JS判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
JavaScript、tab切换完整版(自动切换、鼠标移入停止、移开运行)
Jan 05 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
Sep 08 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
Oct 25 Javascript
微信小程序实现图片压缩功能
Jan 26 Javascript
vue两个组件间值的传递或修改方式
Jul 04 Javascript
详解Vue.directive 自定义指令
Mar 27 Javascript
原生js实现针对Dom节点的CRUD操作示例
Aug 26 Javascript
vue实现淘宝购物车功能
Apr 20 Javascript
vue如何实现关闭对话框后刷新列表
Apr 08 Vue.js
解决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
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
jquery validate使用攻略 第四步
2010/07/01 Javascript
Asp.net下利用Jquery Ajax实现用户注册检测(验证用户名是否存)
2010/09/12 Javascript
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
python requests 使用快速入门
2017/08/31 Python
Python json转字典字符方法实例解析
2020/04/13 Python
Django路由层URLconf作用及原理解析
2020/09/24 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
Python+Opencv实现把图片、视频互转的示例
2020/12/17 Python
如何利用python 读取配置文件
2021/01/06 Python
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
室内设计专业学生的自我评价分享
2013/11/27 职场文书
颁奖典礼主持词
2014/03/25 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
教师师德考核自我评价
2014/09/13 职场文书
教育项目合作协议书格式
2014/10/17 职场文书
关于感谢信的范文
2015/01/23 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
win10更新失败无限重启解决方法
2022/04/19 数码科技
windows10 家庭版下FTP服务器搭建教程
2022/08/05 Servers