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 相关文章推荐
js实现兼容IE6与IE7的DIV高度
May 13 Javascript
基于jQuery的图片剪切插件
Aug 03 Javascript
jquery 中的each()跳出循环的语句
May 23 Javascript
jquery+ajax实现直接提交表单实例分析
Jun 17 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
Jul 22 Javascript
浅析Node.js实现HTTP文件下载
Aug 05 Javascript
JS实现仿PS的调色板效果完整实例
Dec 21 Javascript
使用JavaScript触发过渡效果的方法
Jan 19 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
Feb 21 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
Apr 12 Javascript
JavaScript学习笔记之DOM操作实例分析
Jan 08 Javascript
angularjs1.X 重构controller 的方法小结
Aug 15 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
Access数据库导入Mysql的方法之一
2006/10/09 PHP
php生成随机密码的三种方法小结
2010/09/04 PHP
php把数组值转换成键的方法
2015/07/13 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
js 编写规范
2010/03/03 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
基于原生js淡入淡出函数封装(兼容IE)
2016/10/20 Javascript
Centos7 中安装 Node.js v4.4.4
2016/11/03 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
爬山算法简介和Python实现实例
2014/04/26 Python
Python栈算法的实现与简单应用示例
2017/11/01 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
python 字典操作提取key,value的方法
2019/06/26 Python
基于django传递数据到后端的例子
2019/08/16 Python
详解有关PyCharm安装库失败的问题的解决方法
2020/02/02 Python
Jupyter notebook 启动闪退问题的解决
2020/04/13 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
学生自我鉴定模板
2013/12/30 职场文书
幼儿园中秋节活动反思
2014/02/16 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
社区居务公开实施方案
2014/03/27 职场文书
给校长的建议书600字
2014/05/15 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
高中校园广播稿
2014/10/21 职场文书
质检员岗位职责范本
2015/04/07 职场文书
孟佩杰观后感
2015/06/17 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python