JavaScript 特效三大系列总结
一. 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 特效三大系列总结的更多相关文章
- JS 特效三大系列总结
一. offset系列 1. offset系列的5个属性 1. offsetLeft : 用于获取元素到最近的定位父盒子的左侧距离 * 计算方式: 当前元素的左边框的左侧到定位父盒子的左边框右侧 * ...
- BOM 3.1 location对象 | history对象 | navigator对象 | 定时器 | 三大系列
JavaScript分三个部分: 1. ECMAScript标准---基本语法 2. DOM--->Document Object Model 文档对象模型,操作页面元素的 3. BOM---& ...
- 深入理解javascript选择器API系列第三篇——h5新增的3种selector方法
× 目录 [1]方法 [2]非实时 [3]缺陷 前面的话 尽管DOM作为API已经非常完善了,但是为了实现更多的功能,DOM仍然进行了扩展,其中一个重要的扩展就是对选择器API的扩展.人们对jQuer ...
- Javascript事件模型系列(四)我所理解的javascript自定义事件
被我拖延了将近一个月的javascript事件模型系列终于迎来了第四篇,也是我计划中的最后一篇,说来太惭愧了,本来计划一到两个星期写完的,谁知中间遇到了很多事情,公司的个人的,搞的自己心烦意乱浮躁了一 ...
- JavaScript特效(调试笔记)
JavaScript特效 一.在网页上显示当前的时间日期,例如:“2016年3月26日 星期六”. js源代码: function getTime() { var today = new Date() ...
- 学习javascript基础知识系列第二节 - this用法
通过一段代码学习javascript基础知识系列 第二节 - this用法 this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象.但是在javascr ...
- 学习javascript基础知识系列第三节 - ()()用法
总目录:通过一段代码学习javascript基础知识系列 注意: 为了便于执行和演示,建议使用chrome浏览器,按F12,然后按Esc(或手动选择)打开console,在console进行执行和演示 ...
- 深入理解javascript函数进阶系列第一篇——高阶函数
前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...
- JavaScript 特效之四大家族(offset/scroll/client/event)
三大系列:offset.scroll.client 事件对象:event(事件被触动时,鼠标和键盘的状态)(通过属性控制) 三大系列都是以DOM元素节点的属性形式存在的. 类比访问关系,也是以 ...
随机推荐
- Android Gradle manifestPlaceholders 占位符详解
Android Gradle manifestPlaceholders 占位符详解 在实际项目中,AndroidManifest里十几个地方的值是需要动态的改变(生成apk文件的时候).如果每次去改也 ...
- linux下编译安装nginx
1.首先下载稳定版nginx1.10.2 使用wget命令下载 wget http://nginx.org/download/nginx-1.10.2.tar.gz 2.然后解压 tar -zxvf ...
- AIX误删除LV后如何进行现场保护和数据恢复工作
在AIX环境下,若因维护误操作.存储mapping错误等,不小心将LV误删除,这种损失通常是巨大的.删除后的不当保护及恢复操作可能使数据无法恢复,也可能增加处理的时间与算法复杂度.如何有效保护现场,并 ...
- .bind.apply() 解决 new 操作符不能用与 apply 或 call 同时使用
背景: 小明想要用数组的形式为 Cls.func 传入多个参数,他想到了以下的写法: var a = new Cls.func.apply(null, [1, 2, 3]); 然而浏览器却报错Cls. ...
- Linux中批量添加文件和修改文件小笔记
1.#使用通配符批量创建5个文件 $ touch file{1..10}.txt 2.#批量修改这五个后缀名为.txt的文本文件名重命名为.c后缀名结尾的文件 $ rename 's/\.txt/\. ...
- nginx 高可用
1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务, ...
- 学习sql基础注入的方法
作为一个初学者的我,经学习发现基础真的十分重要, 这个随笔是写给我自己的希望我能坚持住 当然,我也希望对其他人有点帮助 在sql注入的过程中,我越发感觉那些基础函数的重要性 其实我感觉sql注入其实就 ...
- ReactiveCocoa学习总结(1)
1. 它是什么? 官方解释: [RACSignal] is a push-driven stream with a focus on asynchronous event delivery throu ...
- RabbitMQ4--发后即忘和RPC
在项目中引入RabbitMQ通常会考虑它会带来的好处:解耦应用程序,实现不同编程语言之间的互通,解除对特定通信协议的依赖,解除应用程序在时序上执行的依赖(异步).落实到代码层面就是两种常用应用模式:& ...
- composer安装及使用说明和相关原理文档
一.安装composer: 1.官方安装方法见https://getcomposer.org/download/ 2.本人安装方法: ①先配好yum源(不会配置的见博客如何制作自己的yum源),我 ...