一. offset系列

1. offset系列的5个属性

  1. 1. offsetLeft : 用于获取元素到最近的定位父盒子的左侧距离
  2. * 计算方式: 当前元素的左边框的左侧到定位父盒子的左边框右侧
  3. * 如果父级盒子没有定位, 那么会接着往上找有定位的盒子
  4. * 如果上级元素都没有定位,那么最后距离是与bodyleft
  5. 2. offsetTop : 用于获取元素到最近定位父盒子的顶部距离
  6. * 计算方式:当前元素的上边框的上侧到定位父盒子的上边框下侧
  7. * 如果父级盒子没有定位,那么会接着往上找有定位的盒子
  8. * 如果上级元素都没有定位,那么最后距离是与bodytop
  9. 3. offsetWidth :用于获取元素的真实宽度(除了margin以外的宽度)
  10. 4. offsetHeight : 用于获取元素的真实高度(除了margin以外的高度)
  11. 5. offsetParent :用于获取该元素中有定位的最近父级元素
  12. * 如果当前元素的父级元素都没有进行定位,那么offsetParentbody

2. 与style.(left/top/width/height)的区别:

  1. 1. offset系列的是只读属性,而通过style的方式可以读写
  2. 2. offset系列返回的数值类型(结果四舍五入),style返回的是字符串
  3. 3. offsetLeft offsetTop 可以返回没有定位的元素的left值和top值,而style不可以

二. scroll系列

1.scroll系列的4个属性

  1. 1. scrollHeight :元素中内容的实际高度(没有边框)
  2. * 如果内容不足,就是元素的高度
  3. 2. scrollWidth: 元素中内容的实际宽度(没有边框)
  4. * 如果内容不足,就是元素的宽度
  5. 3. scrollTop: onscroll事件发生时,元素向上卷曲出去的距离
  6. 4. scrollLeft : onscroll事件发生时,元素向左卷曲出去的距离

2. 兼容问题

(1) 兼容问题

  1. * 未声明 DTD: 谷歌,火狐,IE9+支持
  2. document.body.scrollTop/scrollLeft
  3. * 已经声明DTD:IE8以下支持
  4. document.documentElement.scrollTop/scrollLeft
  5. * 火狐/谷歌/ie9+以上支持的
  6. window.pageYOffest/pageXOffest

(2) 兼容代码

  1. function getScroll() {
  2. return {
  3. left: window.pageXOffset || document.body.scrollLeft || document.documentElement.scrollLeft || 0,
  4. top: window.pageYOffset || document.body.scrollTop || document.documentElement.scrollTop || 0
  5. };
  6. }
  7. 使用方法:
  8. 1. 取得scrollLeft值: getScroll().left
  9. 2. 取得scrollTop值: getScroll().top

三. client系列

1.client系列的4个常用属性(clientTop和clientLeft这里不予介绍)

  1. 1. clientWidth : 获取网页可视区域的宽度
  2. 2. clientHeight: 获取网页可视区域的高度
  3. 3. clientX :获取鼠标事件发生时的应用客户端区域的水平坐标
  4. 4. clientY :获取鼠标事件发生时的应用客户端区域的垂直坐标

2. 兼容问题

(1) clientWidth 和 clientHeight的兼容问题

  1. //由浏览器对象不同导致
  2. * 未声明 DTD: 谷歌,火狐,IE9+支持
  3. document.body.clientWidth/clientHeight
  4. * 已经声明DTD:IE8以下支持
  5. document.documentElement.clientWidth/clientHeight
  6. * 火狐/谷歌/ie9+以上支持的
  7. window.innerWidth/innerHeight

(2) clientWidth 和 clientHeight的兼容代码

  1. function client(){
  2. if(window.innerWidth){
  3. return {
  4. "width":window.innerWidth,
  5. "height":window.innerHeight
  6. };
  7. }else if(document.compatMode === "CSS1Compat"){
  8. return {
  9. "width":document.documentElement.clientWidth,
  10. "height":document.documentElement.clientHeight
  11. };
  12. }else{
  13. return {
  14. "width":document.body.clientWidth,
  15. "height":document.body.clientHeight
  16. };
  17. }
  18. }
  19. 使用方法:
  20. 1. 取得clientWidth的值: client().width
  21. 2. 取得clientHeight的值: client().height

(3)clientX 和 clientY的兼容问题

  1. //由事件参数对象的兼容性问题导致
  2. 1. 谷歌,火狐,IE9+: 事件参数对象随着事件处理函数的参数传入
  3. 2. IE8以下: event对象必须作为window对象的一个属性(window.event)

(4)clientX 和 clientY的兼容性代码

  1. //将client和scroll的兼容问题进行对象的封装
  2. var evtTools={
  3. //获取兼容的事件参数对象
  4. getEvt:function (e) {
  5. return window.event?window.event:e;
  6. },
  7. //获取的是可视区域的横坐标
  8. getClientX:function (e) {
  9. return this.getEvt(e).clientX;
  10. },
  11. //获取的是可视区域的纵坐标
  12. getClientY:function (e) {
  13. return this.getEvt(e).clientY;
  14. },
  15. //获取向左卷曲出去的距离的横坐标
  16. getScrollLeft:function () {
  17. return window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft||0;
  18. },
  19. //获取向上卷曲出去的距离的纵坐标
  20. getScrollTop:function () {
  21. return window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop||0;
  22. }
  23. };

四.总结

  1. 网页可见区域宽: document.body.clientWidth;
  2. 网页可见区域高: document.body.clientHeight;
  3. 网页可见区域宽: document.body.offsetWidth (包括边线的宽);
  4. 网页可见区域高: document.body.offsetHeight (包括边线的宽);
  5. 网页正文全文宽: document.body.scrollWidth;
  6. 网页正文全文高: document.body.scrollHeight;
  7. 网页被卷去的高: document.body.scrollTop;
  8. 网页被卷去的左: document.body.scrollLeft;
  9. 网页正文部分上: window.screenTop;
  10. 网页正文部分左: window.screenLeft;
  11. 屏幕分辨率的高: window.screen.height;
  12. 屏幕分辨率的宽: window.screen.width;
  13. 屏幕可用工作区高度: window.screen.availHeight;
  14. 屏幕可用工作区宽度:window.screen.availWidth;
  15.  

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
343599877,我们一起学前端!

JavaScript 特效三大系列总结的更多相关文章

  1. JS 特效三大系列总结

    一. offset系列 1. offset系列的5个属性 1. offsetLeft : 用于获取元素到最近的定位父盒子的左侧距离 * 计算方式: 当前元素的左边框的左侧到定位父盒子的左边框右侧 * ...

  2. BOM 3.1 location对象 | history对象 | navigator对象 | 定时器 | 三大系列

    JavaScript分三个部分: 1. ECMAScript标准---基本语法 2. DOM--->Document Object Model 文档对象模型,操作页面元素的 3. BOM---& ...

  3. 深入理解javascript选择器API系列第三篇——h5新增的3种selector方法

    × 目录 [1]方法 [2]非实时 [3]缺陷 前面的话 尽管DOM作为API已经非常完善了,但是为了实现更多的功能,DOM仍然进行了扩展,其中一个重要的扩展就是对选择器API的扩展.人们对jQuer ...

  4. Javascript事件模型系列(四)我所理解的javascript自定义事件

    被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...

  5. JavaScript特效(调试笔记)

    JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...

  6. 学习javascript基础知识系列第二节 - this用法

    通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...

  7. 学习javascript基础知识系列第三节 - ()()用法

    总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...

  8. 深入理解javascript函数进阶系列第一篇——高阶函数

    前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...

  9. JavaScript 特效之四大家族(offset/scroll/client/event)

      三大系列:offset.scroll.client 事件对象:event(事件被触动时,鼠标和键盘的状态)(通过属性控制)   三大系列都是以DOM元素节点的属性形式存在的. 类比访问关系,也是以 ...

随机推荐

  1. 【外文翻译】 为什么我要写 getters 和setters

    原文作者: Shamik Mitra 原文链接:https://dzone.com/articles/why-should-i-write-getters-and-setters 当我开始我的java ...

  2. 计算机程序的思维逻辑 (82) - 理解ThreadLocal

    本节,我们来探讨一个特殊的概念,线程本地变量,在Java中的实现是类ThreadLocal,它是什么?有什么用?实现原理是什么?让我们接下来逐步探讨. 基本概念和用法 线程本地变量是说,每个线程都有同 ...

  3. webService基础知识--认识WebService

    之前在找工作的时候,有面试官问到WebService,当时没有接触过,正好现在做的项目中有用到WebService,所以就趁着业余时间来学习了. 一.简介 先来看看百度百科对WebService的解释 ...

  4. bzoj3939 【USACO 2015 FEB GOLD 】cow hopscotch

    Description 就像人类喜欢玩"跳房子"的游戏,农民约翰的奶牛已经发明了该游戏的一个变种自己玩.由于笨拙的动物体重近一吨打,牛跳房子几乎总是以灾难告终,但这是没有阻止奶牛几 ...

  5. phpcms笔记

    一.建立虚拟站点 1.先更改www目录下的站点名称,再找到apache, 打开"Apache2\conf\extra"下的"httpd-vhosts.conf" ...

  6. 设计模式的征途—5.原型(Prototype)模式

    相信大多数的人都看过<西游记>,对孙悟空拔毛变出小猴子的故事情节应该都很熟悉.孙悟空可以用猴毛根据自己的形象复制出很多跟自己一模一样的小猴兵出来,其实在设计模式中也有一个类似的模式,我们可 ...

  7. 'k1': 大于66的所有值, 'k2': 小于66的所有值

    #!/usr/bin/env python # -*- coding: utf-8 -*- #有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值 ...

  8. Oracle清除数据库中长时间占用资源的非活动的会话

    1.启动资源计划 alter system set resource_limit=true scope=spfile; 2.设置非活动回话十五分钟断开,释放资源 alter profile defau ...

  9. 介绍几个python的音频处理库

    一.eyeD3 直接在google上搜索python mp3 process ,推荐比较多的就是这个第三方库了.先来看看官方介绍吧. About eyeD3 is a Python tool for ...

  10. fopen的使用小记

    整理自https://msdn.microsoft.com/zh-cn/library/t3ayayh1(VS.80).aspx errno, _doserrno, _sys_errlist, and ...