Javascript获取页面的各种坐标汇总
说明,本文全部内容都基于各浏览器的标准渲染模式。也就是在HTML文件首部有标签
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
或
<!DOCTYPE html>
1)鼠标点击事件的坐标,相对于可视区域(Client)左上角
var point_y = evt.clientY;
var point_x = evt.clientX;
其中evt为鼠标点击事件。
2)可视区域左上角的坐标,相对于整个页面(Page)左上角
if(window.pageYOffset != 'undefined') {
point.x = window.pageXOffset;
point.y = window.pageYOffset;
}
else if(typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {
point.x = document.documentElement.scrollLeft;
point.y = document.documentElement.scrollTop;
}
else if(typeof document.body != 'undefined') {
point.x = document.body.scrollLeft;
point.y = document.body.scrollTop;
}
关于document.compatMode,请参考 关于document.compatMode的一些介绍
3) 某元素的左上角坐标,相对于整个页面(Page)左上角
function elementLeft(e)
{
var offset = e.offsetLeft;
if(e.offsetParent != null) offset += elementLeft(e.offsetParent);
return offset;
}
4) 网页全文高和宽
网页正文全文宽 document.body.scrollWidth
网页正文全文高 document.body.scrollHeight
其中,IE7/IE8/IE9/Firefox行为一致,指的都是抛除position=absolute的元素且不管页面缩放的全文高度;Chrome行为稍有不同,计算宽度和高度时包含了position=absolute的元素;且当页面缩放时,当全文高度/宽度小于可视区域的高度和宽度时,给出的是可视区域的高度和宽度。
5)屏幕分辨率的高和宽
屏幕分辨率的高 window.screen.height
屏幕分辨率的宽 window.screen.width
其中,当页面不缩放时,三种浏览器的行为一致,都是获得真实的屏幕分辨率;
当页面缩放时,Chrome返回的值不变,而IE7/IE8/IE9/Firefox的行为一致,返回 屏幕分辨率/缩放比例。
比如,当屏幕分辨率为1920*1200,缩放比例200%时,返回960*600.
6) 网页可视区域的高和宽
网页可见区域宽 document.body.clientWidth
网页可见区域高 document.body.clientHeight
该高度和宽度扣除了浏览器右侧和底部的滚动条,也扣除了body的margin.
高度 = Min(页面高度,可视高度)宽度 = Max(页面宽度,可视高度)
其中,如果页面底部是某些元素的margin,则此margin不计算在页面高度内;
注意,页面缩放后,高度不变,宽度为(原始宽度/缩放比例)
7) 网页被卷去的高和宽
网页被卷去的宽度 window.pageXOffset; document.documentElement.scrollLeft;
网页被卷去的高度 window.pageYOffset;document.documentElement.scrollTop;
其中,前者三种浏览器都支持,Chrome不支持后者。
8) 某元素ScrollHeight / OffsetHeight / ClientHeight的区别
OffsetHeight为元素的高度,被挡住的部分同样计算在内;其父元素的overflow属性对此值没有影响;自身的overflow高度对此就没有影响。
scrollHeight为元素的高度,被挡住的部分同样计算在内;其父元素的overflow属性对此值没有影响;受自身的overflow影响。
clientHeight为元素的高度,被挡住的部分同样计算在内;其父元素的overflow属性对此值没有影响;受自身的overflow影响。
经过测试,发现在所有情形下scrollHeight与clientHeight的值都相同...有点诡异。
注意,IE系列浏览器的滚动条的宽度和高度是是固定的16px,不受缩放影响;Firefox和Chrome的滚动条在100%的时候是16px,当缩放时,该宽度和高度发生变化,为 (16/缩放比例)px.
9)某元素的OffsetTop
对于position!=absolute的元素,offsettop为其相对于其祖先元素中最近的一个postion=relative或position=absolute的元素的偏移。
对于position=absolute的元素,offsettop为其top属性指定的值,如果该属性为空,则与position!=absolute的时候算法相同;
10)某元素的ScrollTop
注意,scrollTop是指某一元素内部的元素被卷去的高度;而不是该元素本身被卷去的高度;
只有当该元素的overflow=auto或scroll的时候,该数值才有意义;
说明,本文全部内容都基于各浏览器的标准渲染模式。也就是在HTML文件首部有标签
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
或
<!DOCTYPE html>
1)鼠标点击事件的坐标,相对于可视区域(Client)左上角
var point_y = evt.clientY;
var point_x = evt.clientX;
其中evt为鼠标点击事件。
2)可视区域左上角的坐标,相对于整个页面(Page)左上角
if(window.pageYOffset != 'undefined') {
point.x = window.pageXOffset;
point.y = window.pageYOffset;
}
else if(typeof document.compatMode != 'undefined' && document.compatMode != 'BackCompat') {
point.x = document.documentElement.scrollLeft;
point.y = document.documentElement.scrollTop;
}
else if(typeof document.body != 'undefined') {
point.x = document.body.scrollLeft;
point.y = document.body.scrollTop;
}
关于document.compatMode,请参考 关于document.compatMode的一些介绍
3) 某元素的左上角坐标,相对于整个页面(Page)左上角
function elementLeft(e)
{
var offset = e.offsetLeft;
if(e.offsetParent != null) offset += elementLeft(e.offsetParent);
return offset;
}
4) 网页全文高和宽
网页正文全文宽 document.body.scrollWidth
网页正文全文高 document.body.scrollHeight
其中,IE7/IE8/IE9/Firefox行为一致,指的都是抛除position=absolute的元素且不管页面缩放的全文高度;Chrome行为稍有不同,计算宽度和高度时包含了position=absolute的元素;且当页面缩放时,当全文高度/宽度小于可视区域的高度和宽度时,给出的是可视区域的高度和宽度。
5)屏幕分辨率的高和宽
屏幕分辨率的高 window.screen.height
屏幕分辨率的宽 window.screen.width
其中,当页面不缩放时,三种浏览器的行为一致,都是获得真实的屏幕分辨率;
当页面缩放时,Chrome返回的值不变,而IE7/IE8/IE9/Firefox的行为一致,返回 屏幕分辨率/缩放比例。
比如,当屏幕分辨率为1920*1200,缩放比例200%时,返回960*600.
6) 网页可视区域的高和宽
网页可见区域宽 document.body.clientWidth
网页可见区域高 document.body.clientHeight
该高度和宽度扣除了浏览器右侧和底部的滚动条,也扣除了body的margin.
高度 = Min(页面高度,可视高度)宽度 = Max(页面宽度,可视高度)
其中,如果页面底部是某些元素的margin,则此margin不计算在页面高度内;
注意,页面缩放后,高度不变,宽度为(原始宽度/缩放比例)
7) 网页被卷去的高和宽
网页被卷去的宽度 window.pageXOffset; document.documentElement.scrollLeft;
网页被卷去的高度 window.pageYOffset;document.documentElement.scrollTop;
其中,前者三种浏览器都支持,Chrome不支持后者。
8) 某元素ScrollHeight / OffsetHeight / ClientHeight的区别
OffsetHeight为元素的高度,被挡住的部分同样计算在内;其父元素的overflow属性对此值没有影响;自身的overflow高度对此就没有影响。
scrollHeight为元素的高度,被挡住的部分同样计算在内;其父元素的overflow属性对此值没有影响;受自身的overflow影响。
clientHeight为元素的高度,被挡住的部分同样计算在内;其父元素的overflow属性对此值没有影响;受自身的overflow影响。
经过测试,发现在所有情形下scrollHeight与clientHeight的值都相同...有点诡异。
注意,IE系列浏览器的滚动条的宽度和高度是是固定的16px,不受缩放影响;Firefox和Chrome的滚动条在100%的时候是16px,当缩放时,该宽度和高度发生变化,为 (16/缩放比例)px.
9)某元素的OffsetTop
对于position!=absolute的元素,offsettop为其相对于其祖先元素中最近的一个postion=relative或position=absolute的元素的偏移。
对于position=absolute的元素,offsettop为其top属性指定的值,如果该属性为空,则与position!=absolute的时候算法相同;
10)某元素的ScrollTop
注意,scrollTop是指某一元素内部的元素被卷去的高度;而不是该元素本身被卷去的高度;
只有当该元素的overflow=auto或scroll的时候,该数值才有意义;
Javascript获取页面的各种坐标汇总的更多相关文章
- 用JavaScript获取页面上被选中的文字的技巧
这里介绍的一个小技巧是如何用JavaScript获取页面上被选中的文字的方法.最关键的JavaScript API是: event.selection = window.getSelection(); ...
- 用javaScript获取页面元素值
用JavaScript获取页面元素常见的三种方法: getElementById() ...
- JavaScript获取页面元素的常用方法
1.通过标签获取元素,返回一个数组 var li = document.getElementsByTagName('li');//标签获取元素 li[0].innerHTML;// 查看获取元素的内容 ...
- javascript 获取页面的高度及滚动条的位置的代码
http://www.jb51.net/article/23331.htm javascript 获取页面的高度及滚动条的位置的代码 作者: 字体:[增加 减小] 类型:转载 javascript ...
- 用 Javascript 获取页面大小、窗口大小和滚动条位置
页面大小.窗口大小和滚动条位置这三个数值在不同的浏览器例如 Firefox 和 IE 中有着不同的实现.即使在同一种浏览器例如 IE 中,不同版本也有不同的实现. 本文给出两个能兼容目前所有浏览器的 ...
- 利用JavaScript获取页面文档内容
JavaScript的document对象包含了页面的实际内容,所以利用document对象可以获取页面内容,例如页面标题.各个表单值. <!DOCTYPE html> <html ...
- javascript获取页面文档内容
<html> <head> <title>JavaScript基础</title> </head> <body> <p&g ...
- javascript 获取页面尺寸/位置
************************************************************************//ie中如果全部不给定值则会都为零(宽和高在设置一个的 ...
- Javascript 获取页面高度(多种浏览器)
//2015年8月13日11:00:50 网页可见区域宽: document.body.clientWidth网页可见区域高: document.body.clientHeight网页可见区域宽: d ...
随机推荐
- sql数据库查询相关操作,SQL的应用——SQL多表连查、子查询、多行子查询
? 1 **SQL多表连查** ? 1 2 3 4 5 6 7 8 --查询员工和部门信息 select * from emp e,dept d where e.deptno=d.deptno --查 ...
- 《算法 - Lru算法》
一:概述 - LRU 用于管理缓存策略,其本身在 Linux/Redis/Mysql 中均有实现.只是实现方式不尽相同. - LRU 算法[Least recently used(最近最少使用)] - ...
- springboot注入的四个注解
java配置主要靠java类和一些注解来达到和xml配置一样的效果,比较常用的注解有: @Configuration:声明一个类作为配置类,代替xml文件@Bean:声明在方法上,将方法的返回值加入B ...
- Python属性的查找顺序
属性查找顺序 关于属性描述符请看上文>属性描述符 在梳理属性查找相关知识时,查看了很多的书籍和他人的博客,发现很多讲的过于抽象,并没有一个清晰的流程呈现.特此写下我对于此方面的理解和总结. ...
- Django模型层之ORM
Django模型层之ORM操作 一 ORM简介 我们在使用Django框架开发web应用的过程中,不可避免地会涉及到数据的管理操作(如增.删.改.查),而一旦谈到数据的管理操作,就需要用到数据库管理软 ...
- 关于django操作orm的一些事--反向生成orm、连接多个数据库
1. django反向生成orm的类代码 使用命令python manage.py inspectdb > app01/models.py,注意,我这里的app01是app的名字. 2.djan ...
- [洛谷P5431]【模板】乘法逆元2
题目大意:给定$n(n\leqslant5\times10^6)$个正整数$a_i$,和$k$.求:$$\sum_{i=1}^n\dfrac{k^i}{a_i}\pmod p$$题解:$$令P=\pr ...
- GOF 的23种JAVA常用设计模式总结 01 设计模式的概念分类和功能
1.简介 软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.它描述了在软件设计过程中的一些不断重复发生的 ...
- Java8 基础数据类型包装类-Long
https://blog.csdn.net/u012562117/article/details/79023440 基础 //final修饰不可更改,每次赋值都是新建类(其中-128~127是通过L ...
- python实现scp功能
最近公司有一个需求,需要把服务器A上的任务放到服务器B上,因为B上有HTTP,并且可以被外网访问,但是直接通过shell的scp,每次都需要输入密码.这里用python简单实现一下 直接上代码: im ...