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 相关文章推荐
JavaScript入门教程(1) 什么是JS
Jan 31 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
Apr 02 Javascript
js获取当前页面的url网址信息
Jun 12 Javascript
Javascript 绘制 sin 曲线过程附图
Aug 21 Javascript
详解Javascript动态操作CSS
Dec 08 Javascript
js正则表达式中exec用法实例
Jul 23 Javascript
vuejs绑定class和style样式
Apr 11 Javascript
JS实现线性表的链式表示方法示例【经典数据结构】
Apr 11 Javascript
Js实现京东无延迟菜单效果实例(demo)
Jun 02 Javascript
jquery图片放大镜效果
Jun 23 jQuery
AngularJS实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
Jul 17 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
memcached 和 mysql 主从环境下php开发代码详解
2010/05/16 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
2017/08/01 PHP
PHP中cookie知识点学习
2018/05/06 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
javascript Excel操作知识点
2009/04/24 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
JavaScript中为元素加上name属性的方法
2011/05/09 Javascript
关于JS字符串函数String.replace()
2013/04/07 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
json格式的时间显示为正常年月日的方法
2013/09/08 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
jQuery浏览器CSS3特写兼容实例
2015/01/19 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
ES6中的Javascript解构的实现
2020/10/30 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
python使用pymysql实现操作mysql
2016/09/13 Python
Python对象类型及其运算方法(详解)
2017/07/05 Python
PyQt5主窗口动态加载Widget实例代码
2018/02/07 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
python 代码运行时间获取方式详解
2020/09/18 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
输入N,打印N*N矩阵
2012/02/20 面试题
公安学专业求职信
2014/07/27 职场文书
大学生求职自荐信
2015/03/24 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
筑梦中国心得体会
2016/01/18 职场文书
导游词之河北野三坡
2019/12/11 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android