上一篇主要分析了一下offset家族属性,本篇文章则主要是来分析一下scroll家族属性。

首先,scroll家族包括4个属性:

  • 网页正文宽度:document.body.scrollWidth;
  • 网页正文高度:document.body.scrollHeight;
  • 网页被卷去的高:document.body.scrollTop;
  • 网页被卷去的左:document.body.scrollLeft;

接下来,我们先简单看一下相关属性。

例1:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
body{
height: 3000px;
}
</style>
</head>
<body>
<script type="text/html">
console.log(document.documentElement.scrollTop, document.documentElement.scrollLeft);
</script>
</body>
</html>

在谷歌浏览器下面,我们会发现,虽然有滚动条,甚至在滚动时候,都没有打印值,那是因为我们在滚动的时候是触发的滚动事件,所以我们需要监听的是滚动事件。

因此,我们将上面的代码稍作修改。将js部分改为下面的这样的。

例2:

<script type="text/html">
window.onscroll = function () {
console.log(document.documentElement.scrollTop, document.documentElement.scrollLeft);
}
</script>

此时,我们就可以监听到浏览器的滚动事件相应的值了,

封装scroll

其实,在实际运用过程中,为了处理不同浏览器的差距,我们用来表示scroll的值的方式有所不同,这需要从浏览器的模式说起。早期的浏览器在对css进行解析的时候,并未遵循W3C标准,这时的解析方式被称为怪异模式(quirks),后来随着W3C的标准越来越重要,众多的浏览器开始遵循W3C标准解析css,此时我们称为严格模式(strict mode)。

我们可以通过document.compatMode的值来判断是否处于标准模式,从而决定用什么方式获取相应的scroll值。

例3:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
body{
height: 3000px;
}
</style>
</head>
<body> <script>
function scroll() {
if(window.pageYOffset !== null){
return {
top: window.pageYOffset,
left: window.pageXOffset
}
}else if(document.compatMode === "CSS1Compat"){ // W3C
return {
top: document.documentElement.scrollTop,
left: document.documentElement.scrollLeft
}
}else{
return {
top: document.body.scrollTop,
left: document.body.scrollLeft
}
}
} window.onscroll = function () {
console.log(scroll().top);
}
</script>
</body>
</html>

在上面的代码中,我们通过判断不同的模式使用不同的方法获取scroll的值,并将这种方法进行封装,方便调用,这样就可以快速处理不同浏览器中的兼容性问题,获取我们需要的值了。

scroll家族属性的更多相关文章

  1. client家族属性

    在前面总结了offset家族属性和scroll家族属性,今天来总结一下client家族属性,同前面一样,client家族也包宽高和左上,具体的通过代码来区别这三大家族属性的不同. <!DOCTY ...

  2. offse家族属性

    在JavaScript中,常用offset.scroll和client家族属性来表示元素的位置和大小相关属性,最近在网上找到了一张图来表示三者之间的关系,正好可以在此借鉴一下. 本次主要来看一下off ...

  3. js中对象的一些特性,JSON,scroll家族

    一.js中对象的一些特性 对象的动态特性 1.当对象有这个属性时,会对属性的值重写 2.当对象没有这个属性时,会为对象创建一个新属性,并赋值 获得对象的属性的方式 为元素设置DOM0级事件 二.JSO ...

  4. JavaScript offset、client、scroll家族

    offsetParent <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  5. JavaScript Scroll家族以及封装

    JavaScript Scroll家族以及封装 scrollTop & scrollLeft 别卷去的值,就是当滑动滚轮浏览网页的时候,网页隐藏在屏幕上方或左侧的距离 获得scrollTop ...

  6. 第52天:offset家族、scroll家族和client家族的区别

    一.offset家族 1.offsetWidth offsetHeight offsetLeft offsetTop offsetParent共同组成了offset家族,用来获取元素尺寸. offse ...

  7. javaScript动画2 scroll家族

    offsetWidth和offsetHight (检测盒子自身宽高+padding+border) 这两个属性,他们绑定在了所有的节点元素上.获取之后,只要调用这两个属性,我们就能够获取元素节点的宽和 ...

  8. 三大家族(offset、scroll、client)

    offset.scroll.client三大家族 offset家族 offsetWidth 与 offsetHeight offset 偏移 用于获取元素自身的位置和大小 offsetWidth和of ...

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

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

随机推荐

  1. 限定某个目录禁止解析php 、限制user_agent 、php的配制文件、PHP的动态扩展模块

    1. 限定某个目录禁止解析php(有些目录用户可以上传文件或图片,可能会被恶意者上传其它文件):编辑:/usr/local/apache2.4/conf/extra/httpd-vhosts.conf ...

  2. awk 相关的复习

    1. awk 引用外部变量: aa=666  echo "." | awk -v GET_A=$aa '{print GET_A}' . sort -n fuxi.awk |awk ...

  3. PTA——最大公约数和最小公倍数

    PTA 7-26 最大公约数和最小公倍数 #include<stdio.h> int main(){ int num1,num2,temp1,temp2,r; scanf("%d ...

  4. Autofac解耦事件总线

    事件总线之Autofac解耦 事件总线是通过一个中间服务,剥离了常规事件的发布与订阅(消费)强依赖关系的一种技术实现.事件总线的基础知识可参考圣杰的博客[事件总线知多少] 本片博客不再详细概述事件总线 ...

  5. 20165313 《Java程序设计》第一周学习总结

    教材学习内容总结 1.Java的地位 1.网络地位 2.语言地位 3.需求地位 2.Java的特点 1.简单 2.面向对象 3.平台无关 4.多线程 5.动态 3.安装JDK(重点) 注释:需修改系统 ...

  6. 用Git向gitHub上传项目

    用Git向gitHub上传项目 1.安装git 2.在git安装目录下,运行git-bash.exe  如图所示 3.在git中绑定你注册gitHub是的用户名.邮箱. $ git config -- ...

  7. 【传输协议】什么是CA证书

    1.什么是CA证书. 看过一些博客,写的比较形象具体. ◇ 普通的介绍信 想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有人都不认识他,他咋办捏?常 ...

  8. Java和C++的区别杂记

    1.java中的作用域描述符(类比于C++是通过"."来实现,Java中"类名.静态成员名",C++中"类名::静态成员名" 2.java中 ...

  9. 全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解)

    不多说,直接上干货! 环境: windows10系统(64位) 最好先安装jre或jdk(此软件用来打开oracle自带的可视化操作界面,不装也没关系:可以安装plsql,或者直接用命令行操作) Or ...

  10. spring boot 学习资料

    spring boot 学习资料: 学习资料 网址 Spring Boot Cookbook-极客学院 http://wiki.jikexueyuan.com/project/spring-boot- ...