scroll翻译过来,就是滚动的,我们使用scroll系列的相关属性可以动态的得到该元素的大小、滚动距离等。

scroll系列属性 作用
element.scrollTop 返回被卷上去的上侧距离,返回数值不带单位
element.scrollLeft 返回被卷上去的左侧距离,返回数值不带单位
element.scrollWidth 返回自身实际的宽度,不含边框,返回数值不带单位
element.scrollHeight 返回自身实际的高度,不含边框,返回数值不带单位

案例:仿淘宝固定右侧侧边栏

1.原先侧边栏是绝对定位。

2.当页面滚动到一定位置,侧边栏改为固定定位。

3.页面继续滚动,会让返回顶部显示出来。

分析:

1.需要用到页面滚动事件scroll,因为是页面滚动,所以事件源是document。

2.滚动到某个位置,就是判断页面被卷上去的上部值。

3.页面被卷上去的头部:可以通过window.pageYOffset获得。

4.注意: 元素被卷上去的头部是element.scrollTop,如果是页面被卷去的头部,则是window.pageYOffset。

5.其实这个值 可以通过盒子的 offsetTop可以得到,如果大于等于这个值,就可以让盒子固定定位了。

 1         //1. 获取元素
2 var sliderbar = document.querySelector('.slider-bar');
3 var banner = document.querySelector('.banner');
4 // banner.offestTop 就是被卷去头部的大小 一定要写到滚动的外面
5 var bannerTop = banner.offsetTop
6 // 当我们侧边栏固定定位之后应该变化的数值
7 var sliderbarTop = sliderbar.offsetTop - bannerTop;
8 // 获取main 主体元素
9 var main = document.querySelector('.main');
10 var goBack = document.querySelector('.goBack');
11 var mainTop = main.offsetTop;
12 // 2. 页面滚动事件 scroll
13 document.addEventListener('scroll', function() {
14 // window.pageYOffset 页面被卷去的头部
15 // console.log(window.pageYOffset);
16 // 3 .当我们页面被卷去的头部大于等于了 172 此时 侧边栏就要改为固定定位
17 if (window.pageYOffset >= bannerTop) {
18 sliderbar.style.position = 'fixed';
19 sliderbar.style.top = sliderbarTop + 'px';
20 } else {
21 sliderbar.style.position = 'absolute';
22 sliderbar.style.top = '300px';
23 }
24 // 4. 当我们页面滚动到main盒子,就显示 goback模块
25 if (window.pageYOffset >= mainTop) {
26 goBack.style.display = 'block';
27 } else {
28 goBack.style.display = 'none';
29 }
30 })

页面被卷上去的头部兼容性解决方案

需要注意的是,页面被卷上去的头部,有兼容性问题,因此被卷上去的头部通常有如下几种写法:

1.声明了DTD,使用了document.documentElement.scrollTop

2.未声明DTD,使用document.body.scrollTop

3.新方法window.pageYOffset和window.pageXOffset, IE9开始支持。

封装统一方法getScroll(),使用getScroll().left

1 function getScroll() {
2 return {
3 left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft||0,
4 top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
5 };
6 }

他们主要用法:

1.offset系列,经常用于获得元素位置: offsetLeft offsetTop

2.client经常用于获取元素大小clientWidth、 clientHeight

3.scroll经常用于获取滚动距离scrollTop、scrollLeft

4.注意页面滚动的距离通过window.pageXOffset获得

元素scroll系列属性的更多相关文章

  1. JavaScript学习笔记5 之 计时器 & scroll、offset、client系列属性 & 图片无缝滚动

    一.计时器 setInterval ( 函数/名称 , 毫秒数 )表示每经过一定的毫秒后,执行一次相应的函数(重复) setTimeout ( 函数/名称 , 毫秒数 ) 表示经过一定的毫秒后,只执行 ...

  2. 系列属性(offset、scroll、client)

    一.offset系列属性 <div id="dv"></div> <!-- 已在style标签里设置div宽高各100px --> <sc ...

  3. offset系列,client系列,scroll系列回顾

    一 scroll系列属性      ——滚动

  4. offset系列、scroll系列与client系列

    offset系列: offsetLeft:获取元素距离最左边的距离,自身的margin包括在内,不包括自身的border offsetTop:获取元素距离最上边的距离,自身的margin包括在内,不包 ...

  5. 元素的属性:client系列,scroll系列,offset系

    元素的属性 div.attributes 是所有标签属性构成的数组集合 dir.classList 是所有class名构成的数组集合 在classList的原型链上看一看到从 add()和remove ...

  6. 差别client、offset、scroll系列以及event的几个距离属性

    element元素结点属性 一. offset系列 1.offsetWidth 和offsetHeight element.offsetWidth是一个仅仅读属性,它包含了: css width + ...

  7. 区别client、offset、scroll系列以及event的几个距离属性

    element元素结点属性 一. offset系列 1.offsetWidth 和offsetHeight element.offsetWidth是一个只读属性,它包括了: css width + p ...

  8. 元素滚动 scroll 系列

    定义 : scroll翻译过来就是滚动的,我们使用scroll系列的相关属性可以动态的得到该元素的大小.滚动距离等. 常用属性 : 需要用到页面滚动事件scroll因为是页面滚动,所以事件源是docu ...

  9. python 全栈开发,Day52(关于DOM操作的相关案例,JS中的面向对象,定时器,BOM,client、offset、scroll系列)

    昨日作业讲解: 京东购物车 京东购物车效果: 实现原理: 用2个盒子,就可以完整效果. 先让上面的小盒子向下移动1px,此时就出现了压盖效果.小盒子设置z-index压盖大盒子,将小盒子的下边框去掉, ...

  10. client系列、offset系列、scroll系列

    一.client系列 clientWidth/clientHeight    是我们设置的宽和高加上内边距(没有边框) clientLeft/clientTop 就是我们设置的边框值 二.offset ...

随机推荐

  1. eclipse的问题

    在我使用eclipse的时候出现的一个问题 就是因为汉化之后出现的问题 问题的解决办法 点击帮助 关于 安装细节 选中Babel Language Pack for rt.rap in Chinese ...

  2. [.NET开发者的福音]一个方便易用的在线.NET代码编辑工具.NET Fiddle

    前言 今天给大家分享一个方便易用的.NET在线代码编辑工具,能够帮助.NET开发人员快速完成代码编写.测试和分享的需求(.NET开发者的福音):.NET Fiddle. .NET Fiddle介绍 我 ...

  3. Nginx的安装与运行

    前言:本文是基于虚拟机上的centOS 7对Nginx的安装,可以使用uname -a查看centOS系统版本,本文用来记录安装nginx的步骤和相关命令,方便日后使用时查看. 去官网https:// ...

  4. 神经网络优化篇:详解Mini-batch 梯度下降(Mini-batch gradient descent)

    Mini-batch 梯度下降 机器学习的应用是一个高度依赖经验的过程,伴随着大量迭代的过程,需要训练诸多模型,才能找到合适的那一个,所以,优化算法能够帮助快速训练模型. 其中一个难点在于,深度学习没 ...

  5. 当创建pvc后,kubernetes组件如何协作

    本文分享自华为云社区<当创建一个pvc后,kubernetes会发生什么?>,作者:可以交个朋友. 一.背景 外部存储接入 Kubernetes 的方式主要有两种:In-Tree 和 Ou ...

  6. 快速掌握服务网格系列二:云原生、K8S、服务网格(Service Mesh)及微服务之间的关系

    快速掌握服务网格系列二:云原生.K8S.服务网格(Service Mesh)及微服务之间的关系 首先看下CNCF对云原生的定义: Cloud native technologies empower o ...

  7. Kubernetes Headless服务

    1.概述 Headless Services是一种特殊的service,其spec:clusterIP表示为None,这样在实际运行时就不会被分配ClusterIP,也被称为无头服务,通过DNS解析提 ...

  8. 十八般武艺玩转GaussDB(DWS)性能调优:Plan hint运用

    摘要:本文介绍GaussDB(DWS)另一种可以人工干预计划生成的功能--plan hint. 前言 数据库的使用者在书写SQL语句时,会根据自己已知的情况尽力写出性能很高的SQL语句.但是当需要写大 ...

  9. 实践GoF的设计模式:单例模式

    摘要:单例模式虽然简单易用,但也是最容易被滥用的设计模式.它并不是"银弹",在实际使用时,还需根据具体的业务场景谨慎使用. 本文分享自华为云社区<[Go实现]实践GoF的23 ...

  10. 当物联网遇上云原生:K8s向边缘计算渗透中

    摘要:K8s正在向边缘计算渗透,它为边缘侧的应用部署提供了便利性,在一定程度上转变了边缘应用与硬件之间的关系,将两者的耦合度降低. 本文分享自华为云社区<云原生在物联网中的应用[拜托了,物联网! ...