每次用到诸如client,screen,offset等,虽然通常都是能用对的,但是总觉得不是那么的自信没错。所以整理一下可以再需要的时候来查阅。

一:clientX和clientY,screenX和screenY:

可见:正如字面所讲,screen是鼠标相对屏幕坐标,但screenY取不到客户区以外的值,而client是相对于客户区的。

二:页面坐标位置(page):pageX和pageY:

注:此图滚动条没有画出;

pageX和pageY是相对于文档流的,包含scroll值,所以,在第一屏下,和clientX和clientY没有差别;

此图的div是一个绝对定位的区块。此时layerX和layerY是相对于黄色区块的。

三:偏移量(offset): offsetWidth,offsetHeight,offsetTop,offsetLeft: 

元素的偏移量是根据它的直接父元素来定义的。

区块大小offset(Width/Height)=padding+content+border+scroll也就是offset=client+border+scroll;(content为元素内部实际可用区域)

所以不包含margin(一个区块加了背景并不会涉及margin部分)

图引用于http://www.cnblogs.com/skylar/p/4121508.html

一种获取在页面中偏移量的方法:

var getOffset = {
            top: function (obj) {
                return obj.offsetTop + (obj.offsetParent ? arguments.callee(obj.offsetParent) : 0)
            },//递归,一层一层往上累加offsetTop
            left: function (obj) {
                return obj.offsetLeft + (obj.offsetParent ? arguments.callee(obj.offsetParent) : 0)
            }
        };

偏移量是只读的,每次访问都会重新计算,注意性能问题。

四:客户区(client)大小:

  client=padding+content,不包含滚动条的宽高 (而,offset=padding+content+border+scroll,也就是offset=client+border+scroll)  ,记忆:client就是两部分组成的,padding和content;offset由四部分组成,不含margin。=>无论谁在算w或h时都不关margin鸟事。

五:滚动大小(scroll):scrollWidth,scrollHeight,scrollTop,scrollLeft:

“有些元素没有执行任何代码也可以自动添加滚动条,如HTML;而有些元素需要添加overflow:scroll才能有滚动条”。

  可认为html元素是在浏览客户区里滚动的元素(ie6之前版本怪异模式下是body,所以计算客户区宽才有:document.documentElement.clientWidth||document.body.clientWidth)

带有滚动条的页面总高度是:document.documentElement.scrollHeight||document.body.scrollHeight; 

   图引用于http://www.cnblogs.com/skylar/p/4121508.html

注:在确定文档总高度时,一般取scrollHeight应该取scrollHeight和clientHeight的最大值,以确保兼容性。

八:未完待续

*:对于function getStyle(){

              return obj.currentStyle ? obj.currentStyle[attr] : window.getComputedStyle(obj, null)[attr];

}

只要元素css有left和top,ff、chrome、ie都能获得准确字符类型的数值,该数值就只是css里写的。

如果css只设定了position值,没有指明明left和top多少,:ff下获取对应属性值的left和top值,没有指明left和top就是"0px",而chorme和ie显示auto;

探索javascript----事件对象下的各种X和Y的更多相关文章

  1. 第一百二十节,JavaScript事件对象

    JavaScript事件对象 学习要点: 1.事件对象 2.鼠标事件 3.键盘事件 4.W3C与IE JavaScript事件的一个重要方面是它们拥有一些相对一致的特点,可以给你的开发提供更多的强大功 ...

  2. JavaScript的对象/下

    JavaScript的对象 一.BOM对象 BOM----browser object model 1.window对象 所有浏览器都支持window对象. 概念上讲,一个html文档对应一个wind ...

  3. JavaScript事件对象与事件处理程序

    在学习之前建议请看一下事件流.事件冒泡.事件捕获 一.事件对象 事件对象:在DOM触发事件时,会产生一个事件对象event,这个事件对象包含着所有与事件相关的信息.既然event是事件对象,那么它必然 ...

  4. JavaScript事件对象

    一. 事件对象 事件处理三部分组成:对象.事件处理函数=函数.例如:单击文档任意处. 1.鼠标按钮 非 IE(W3C)中的 button 属性 0 表示主鼠标按钮(常规一般是鼠标左键) 1 表示中间的 ...

  5. JavaScript事件对象【转】

    一. 事件对象 事件处理三部分组成:对象.事件处理函数=函数.例如:单击文档任意处. 1.鼠标按钮 非 IE(W3C)中的 button 属性 0 表示主鼠标按钮(常规一般是鼠标左键) 1 表示中间的 ...

  6. Javascript 事件对象(二)event事件

    Event事件: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" ...

  7. javascript 事件对象

    1.事件对象  用来记录一些事件发生时的相关信息的对象  A.只有当事件发生的时候才产生,只能在处理函数内部访问  B.处理函数运行结束后自动销毁2.如何获取事件对象  IE: window.even ...

  8. JavaScript事件对象与事件的委托

    事件对象 包含事件相关的信息,如鼠标.时间.触发的DOM对象等 js默认将事件对象封装好,并自动的以参数的形式,传递给事件处理函数的第1个参数,如下: document.getElementsByTa ...

  9. JavaScript 事件对象event

    什么是事件对象? 比如当用户单击某个元素的时候,我们给这个元素注册的事件就会触发,该事件的本质就是一个函数,而该函数的形参接收一个event对象. 注:事件通常与函数结合使用,函数不会在事件发生前被执 ...

随机推荐

  1. 移动APP的开发迭代离不开测试,你搞清楚其中的关键点了吗?

    App测试的一个要求是一个beta测试环境.为此,操作系统制造商要么提供他们自己的测试环境,比如:Testflight (iOS),要么可以使用任一商用工具,如:HockeyApp (Android) ...

  2. SSAS 部署失败 总结

    今天部署微软官方的SSAS实例AdventureWorks Multidimensional Models SQL Server 2012到本地SQL SERVER数据库,报了好几个错误.总结一下给大 ...

  3. 报错记录:getOutputStream() has already been called for this response

    仅作记录:参考文章:http://www.blogjava.net/vickzhu/archive/2008/11/03/238337.html 报错信息: java.lang.IllegalStat ...

  4. IOS开发常见错误整理

    1.Cannot create an NSPersistentStoreCoordinator with a nil model 这是在执行到这段代码时引发的: - (void)viewDidLoad ...

  5. 解决Safari高版本浏览器中默认禁用第三方COOKIE(含demo)

    前段时间在项目里遇到了一个比较头疼的问题,就是高版本的Safari中默认会阻止第三方cookie,这使得使用Safari浏览器的用户无法按照正常的业务逻辑进行操作. 问题展现 知识点 什么是第三方co ...

  6. 使用CXF发布WebService

    这里普及一下WebService和cxf的知识.关于webservice和cxf:   WebService.各种提供服务的组件     .企业总线.通讯总线(ESB)CXF:是一个SOA框架,Axi ...

  7. AFNetworking之于https认证

    写在开头: 本来这篇内容准备写在AFNetworking到底做了什么?(三)中的,但是因为我想在三中完结这个系列,碍于篇幅所限.并且这一块内容独立性比较强,所以单独拎出来,写成一篇. 本文从源码的角度 ...

  8. sql语句查询服务器的数据库,数据库的全部表和表的全部列

    下面是数据库的结构: 数据库名是:edushi_zixunok;表名是infoArticle --获取所有用户名 SELECT * FROM sys.sysusers --获取所有用户数据库 SELE ...

  9. TextMate2 最新版下载及源码编译过程

    TextMate2 已经开源,我刚编译成功,如果有需要的同学可以点击下面百度网盘的链接下载.我系统版本是:Mac OS X 10.8.4. TextMate version 2.0-alpha.946 ...

  10. 在ubuntu中安装psutil

    环境:ubuntu 16.04 LTS + python 2.7/3.5共存 + psutil 4.3.0 1.sudo apt-get install python3-dev # 先把python3 ...