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 相关文章推荐
新浪刚打开页面出来的全屏广告代码
Apr 02 Javascript
JavaScript栏目列表隐藏/显示简单实现
Apr 03 Javascript
jQuery实现的多级下拉菜单效果代码
Aug 24 Javascript
Laravel中常见的错误与解决方法小结
Aug 30 Javascript
js 获取元素所有兄弟节点的实现方法
Sep 06 Javascript
JavaScript Date对象应用实例分享
Oct 30 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
Feb 21 Javascript
详解Vue 匿名、具名和作用域插槽的使用方法
Apr 22 Javascript
JS中封装axios来管控api的2种方式
Sep 11 Javascript
layui监听单元格编辑前后交互的例子
Sep 16 Javascript
javascript 设计模式之组合模式原理与应用详解
Apr 08 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
Oct 24 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
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
javscript对象原型的一些看法
2010/09/19 Javascript
[原创]推荐10款最热门jQuery UI框架
2014/08/19 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
jQuery ajax请求struts action实现异步刷新
2017/04/19 jQuery
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
2020/08/22 Javascript
[02:09:59]火猫TV国士无双dota2 6.82版本详解(下)
2014/09/29 DOTA
Python实现程序的单一实例用法分析
2015/06/03 Python
Python数组定义方法
2016/04/13 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
python读取各种文件数据方法解析
2018/12/29 Python
详解Python使用Plotly绘图工具,绘制甘特图
2019/04/02 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
python从内存地址上加载python对象过程详解
2020/01/08 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
如何用 Python 制作一个迷宫游戏
2021/02/25 Python
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
澳大利亚领先的在线葡萄酒零售商:Get Wines Direct
2018/03/27 全球购物
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
银行实习的自我鉴定
2013/12/10 职场文书
初中家长寄语
2014/04/02 职场文书
建筑施工安全责任书
2014/07/24 职场文书
2016国培研修心得体会
2016/01/08 职场文书
高质量“欢迎词”
2019/04/03 职场文书