一. offset系列

1. offset系列的5个属性

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

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

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

二. scroll系列

1.scroll系列的4个属性

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

2. 兼容问题

(1) 兼容问题

* 未声明 DTD: 谷歌,火狐,IE9+支持

  document.body.scrollTop/scrollLeft

* 已经声明DTD:IE8以下支持

 document.documentElement.scrollTop/scrollLeft 

* 火狐/谷歌/ie9+以上支持的

  window.pageYOffest/pageXOffest

(2) 兼容代码

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

三. client系列

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

1. clientWidth : 获取网页可视区域的宽度

2. clientHeight: 获取网页可视区域的高度

3. clientX :获取鼠标事件发生时的应用客户端区域的水平坐标

4. clientY :获取鼠标事件发生时的应用客户端区域的垂直坐标

2. 兼容问题

(1) clientWidth 和 clientHeight的兼容问题

    //由浏览器对象不同导致

* 未声明 DTD: 谷歌,火狐,IE9+支持

document.body.clientWidth/clientHeight

* 已经声明DTD:IE8以下支持

document.documentElement.clientWidth/clientHeight

* 火狐/谷歌/ie9+以上支持的

 window.innerWidth/innerHeight

(2) clientWidth 和 clientHeight的兼容代码

function client(){
if(window.innerWidth){
return {
"width":window.innerWidth,
"height":window.innerHeight
};
}else if(document.compatMode === "CSS1Compat"){
return {
"width":document.documentElement.clientWidth,
"height":document.documentElement.clientHeight
};
}else{
return {
"width":document.body.clientWidth,
"height":document.body.clientHeight
};
}
}
使用方法:
1. 取得clientWidth的值: client().width
2. 取得clientHeight的值: client().height

(3)clientX 和 clientY的兼容问题

    //由事件参数对象的兼容性问题导致

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

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

//将client和scroll的兼容问题进行对象的封装
var evtTools={
//获取兼容的事件参数对象
getEvt:function (e) {
return window.event?window.event:e;
},
//获取的是可视区域的横坐标
getClientX:function (e) {
return this.getEvt(e).clientX;
},
//获取的是可视区域的纵坐标
getClientY:function (e) {
return this.getEvt(e).clientY;
},
//获取向左卷曲出去的距离的横坐标
getScrollLeft:function () {
return window.pageXOffset||document.body.scrollLeft||document.documentElement.scrollLeft||0;
},
//获取向上卷曲出去的距离的纵坐标
getScrollTop:function () {
return window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop||0;
}
};

四.总结

网页可见区域宽: document.body.clientWidth;
网页可见区域高: document.body.clientHeight;
网页可见区域宽: document.body.offsetWidth (包括边线的宽);
网页可见区域高: document.body.offsetHeight (包括边线的宽);
网页正文全文宽: document.body.scrollWidth;
网页正文全文高: document.body.scrollHeight;
网页被卷去的高: document.body.scrollTop;
网页被卷去的左: document.body.scrollLeft;
网页正文部分上: window.screenTop;
网页正文部分左: window.screenLeft;
屏幕分辨率的高: window.screen.height;
屏幕分辨率的宽: window.screen.width;
屏幕可用工作区高度: window.screen.availHeight;
屏幕可用工作区宽度:window.screen.availWidth;

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
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. Rookey.Frame v1.0 视频教程发布了

    经过昨天几个小时的折腾, Rookey.Frame v1.0开发视频教程终于发布了,由于是第一次做视频有很多地方做的不够好,后续我会慢慢改进,争取将视频教程做好. 本期发布视频: (一)Rookey. ...

  2. pt-online-schema-change的原理解析与应用说明

          PERCONA提供了若干管理维护MySQL的小工具,集成在 PERCONA Toolkit工具中,有慢查询分析.主从差异对比.主从差异修复及在线表结构修改等工具,个人觉得挺好用的.本文简单 ...

  3. FancyBox – 经典 Lightbox 效果插件

    效果演示    插件下载

  4. JS基础部分小结

    [使用js的三种方式] 1.HTML标签中内嵌JS(不提倡使用) 2.HTML页面中直接使用JS <script type="text/javascript"> JS代 ...

  5. 【lucene系列学习四】log4j日志文件实现多线程的测试

    参考资料:http://nudtgk2000.iteye.com/blog/1716379 首先,在http://www.apache.org/dyn/closer.cgi/logging/log4j ...

  6. ObjectARX自定义实体的最近点和垂点捕捉算法

    最近点用pickPoint来计算,垂点用lastPoint计算. 一般AcDbCurve类可以用AcGe类的 getClosestPointTo 来实现计算需要的点值. 下面是代码示例: case A ...

  7. vector实现最大流EK算法

    序: 在之前的文章中实现了不利用STL实现EK算法,效率也较高.这次我们企图简化代码,减少变量的使用与手写模拟的代码. 注意:vector等STL的container在不开O2优化的时候实现同一个效果 ...

  8. SpringMVC+Spring 事务无法回滚的问题

    问题描述: Controller里面执行Service的方法,Service方法抛出异常,但是没有按照事务配置的方式回滚: Service的事务配置没有问题: 出现此问题的原因: 在springmvc ...

  9. Oracle树形结构查询之prior的理解

    --1 建表 create table 宇宙( 行星等级 number ,行星名称 varchar2(50) ,上级行星等级 number); --2 数据准备 insert into 宇宙 (行星等 ...

  10. jQuery中的选择器(上)

    从学习jquery开始,现在已经是第三遍看锋利的jQuery这本书了,现在打算对jQuery中的各种选择器进行一下总结,主要是是为了进一步系统的巩固自己对知识的掌握,另外也可以为那些学习jQuery并 ...