浏览器上的坐标体系相关概念(客户区,页面,屏幕)

摘要:
鼠标事件提供三组坐标。让我们解释一下它们之间的关系。下面的界面是一个简单的页面。滚动条用于整个页面。下图中红色框的区域是视口区域。红色区域的左上角是视口区域的(0,0)点,。第二组坐标是页面坐标,如上图所示。对于上面的页面,因为页面向下滚动。所以pageX,pageY和clientX,clientY不相等。第三组坐标是屏幕坐标,指页面上元素相对于屏幕左上角的坐标。

平时如果我们想要通过鼠标点击元素上的某个区域的时候,例如Canvas中的某个点时,就需要计算具体的坐标点。鼠标事件提供了三组坐标,下面我们讲解一下它们之间的关系。

  • 第一组:(clientX,clientY),这组是视口坐标,那什么是视口区?
    下面界面是一个简单的页面,滚动条是针对整个页面的 ,下图中的红色方框的区域就是视口区。红色区域的左上角,就是视口区的(0,0)点, 。

浏览器上的坐标体系相关概念(客户区,页面,屏幕)第1张

面这个页面中有两个iframe, 每个iframe 都有它自己的滚动条,我们点击右边frame 的红色文字,弹出的(clientX,clientY) 是 (10,27 ) 这个是相对右边iframe 的起始点的左边,这时的视口就是右边的iframe(红色框).

浏览器上的坐标体系相关概念(客户区,页面,屏幕)第2张

所以使用clientX,clientY 进行计算的时候需要考虑当前的视口是哪个,是否有嵌套关系,如果有嵌套关系,计算时需要考虑嵌套关系的影响。

  • 第二组坐标是(pageX,pageY) ,这组是页面坐标,还以上图为例。对于上面的页面,因为页面有向下滚动。所以pageX,pageY 和 clientX,clientY是不相等的。

pageX,pageY 也可以通过clientX,clientY 结合 scrollLeft,scrollTop 获得

针对上面第一张图:

pageX = document.documentElement.scrollLeft + clientX;

pageY = document.documentElement.scrollTop + clientY;

如果页面比较复杂,有多个可滚动容器,则对于Active 的可滚动容器

pageX = scrollLeft + clientX

pageY = scrollTop + clientY

其中,pageX,pageY,scrollLeft,scrollTop,clientX,clientY 都是相对Active可滚动容器的原点的坐标。

  • 第三组坐标是(screenX,screenY), 这组坐标是屏幕坐标,指页面上的元素相对于屏幕左上角的坐标。

浏览器上的坐标体系相关概念(客户区,页面,屏幕)第3张

免责声明:文章转载自《浏览器上的坐标体系相关概念(客户区,页面,屏幕)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VIM C语言函数名高亮@PathVariable注解详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IFrame自适应大小(全屏已实现)

近日做项目中用到页面中嵌套iframe,想要实现自适应大小,并且在IE中按F11键全屏时也可以自适应大小。 在网上搜来的代码多数只适应页面中只有单个iframe情况,但笔者页面还有一个logo图片。 经反复实现,如下代码可实现: <html> <html> <head> <meta http-equiv="Cont...

iframe知识点

定义和用法(源自W3school) iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。 属性:    <ifream src = "http://t.zoukankan.com/URL">  url指的是一个.html网页,这个功能是ifream的主要功能,在一个新的网页中插入引号内网页的内容,把一个网页当做另一个网页的内容。...

javascript中top、clientTop、scrollTop、offsetTop的讲解

下面结合各上图介绍一下各个属性的作用:一.offsetTop属性:此属性可以获取元素的上外缘距离最近采用定位父元素内壁的距离,如果父元素中没有采用定位的,则是获取上外边缘距离文档内壁的距离。所谓的定位就是position属性值为relative、absolute或者fixed。返回值是一个整数,单位是像素。此属性是只读的。二.offsetLeft属性...

layer mobile开发layer.full

Layer For Mobile 之 layer.full() 背景介绍:layer mobile是专门针对手机页面开发的一套框架,具体介绍请看官方文档 http://layer.layui.com/mobile/api.html ,因其扩展方法有限,我用到了layer Pc版的layer.full这里做了扩展。 问题:目前layer mobile是2.0...

利用Layer组件弹出多个对话框(非嵌套)与关闭及刷新

页面A中弹出页面B,在页面B中弹出页面C,在layer做嵌套ifframe弹出时会遇到C页面被嵌套在B页面中,如果C尺寸大于B,则C将不能显示完整。这个时候可以考虑B,C页面均由A页面弹出从而避免嵌套带来的问题。废话少说,直接上代码。 1.A弹出B: 在A.html中插入一下代码 layer.open({ title:'...

Selenium-Switch--切换浏览器tab/iframe/alart

Switch 我们在UI自动化测试时,总会出现新建一个tab页面、弹出一个浏览器级别的弹框或者是出现一个iframe标签,这时我们用WebDriver提供的Api接口就无法处理这些情况了。需要用到Selenium单独提供的模块switch_to模块 引用路径 # 第一种方式可以通过直接导入SwitchTo模块来进行操作 from selenium.webd...