javascript获取文档坐标和视口坐标


Posted in Javascript onMay 26, 2015

元素的位置是以像素度量的,向右代表X坐标的增加,向下代表Y坐标的增加,但是,有两个不同的点作为坐标系的原点:元素的X和Y坐标可以相对于文档的左上角或者相对于在职中显示文档的视口的左上角。

在定级窗口和标签页中,”视口“只是实际显示文档内容的浏览器的一部分:它不包括浏览器的“外壳”(如菜单、工具条和标签页)。

javascript获取文档坐标和视口坐标

针对框架也中显示的文档,是口试定了框架页的<iframe>元素。无论在何种情况下,当讨论元素的位置是,必须弄清楚所使用的坐标是文档坐标还是视口坐标。(注意,视口坐标有事也叫作窗口坐标)

如果文档比视口要小,或者说还未出现滚动,则文档的左上角就是视口的左上角,文档和视口坐标系统是同一个。但是一般来说,要在两种坐标系之间互相转换,必须加上或减去滚动的偏移量(scroll offset)。例如,在文档坐标中如果一个元素的Y坐标是200像素,并且用户已经把浏览器向下滚动了75像素,那么视口坐标中元素的Y坐标就是125像素。同样,在视口坐标中如果一个元素的X坐标是400像素,并且用户已经水平滚动了视口200像素,那么文档坐标中像素的X坐标中元素的X坐标就是600像素。

文档坐标比视口坐标更加基础,并且在用户滚动是他们不会发生变化。不过,在客户端编程中使用视口坐标是非常常见的。当使用CSS指定元素的位置时运用了文档坐标。但是最简单的查询元素位置的方法:getBoundingClientRect()返回视口坐标中的位置。类似的,当为鼠标事件注册事件处理程序函数时,报告的鼠标指针的坐标是在视口坐标系中。

javascript获取文档坐标和视口坐标

为了在坐标系中转换,我们需要判定浏览器窗口的滚动条的位置。Window对象的pageXoffset和pageYOffset属性在所有的浏览器中提供这些值,除了IE8及更早的版本以外。IE(和所有现代浏览器)也可以通过scrollLeft和scrollTop属性来获得滚动条的位置。令人迷惑的是,正常的情况下通过查找文档的根节点(document.documentElement)来获取这些属性,但是在怪异模式下,必须在文档的<body>元素(documeng.body)上查询它们。以下显示了如何简便的查询滚动条的位置。

functon getScrollOffsets(w){
  w = w || window;
  var sLeft,sTop;
  if(w.pageXOffset != null) {
    sLeft = w.pageXOffset;
    sTop = w.pageYOffset;
    return {x:sLeft,y:sTop};
  }
  if(document.compatMode == "CSS1Compat"){
    sLeft = document.documentElement.scrollLeft == 0 ? document.body.scrollLeft : document.documentElement.scrollLeft; 
    sTop = document.documentElement.scrollTop == 0 ? document.body.scrollTop : document.documentElement.scrollTop;  
    return {x:sLeft,y:sTop};
  }else if(document.compatMode == "BackCompat"){
    sLeft = document.body.scrollLeft; 
    sTop = document.body.scrollTop;
    return {x:sLeft,y:sTop};  
  }
}

有时候能够判定视口的尺寸也是非常有用的,例如,为了确定文档的案部分是当前可见的。利用滚动偏移量查询视口的尺寸的简单方法在IE8及更早版本中无法工作,而且该技术在IE中的运行法师还要取决于浏览器是否处于怪异模式还是标准模式。

window下的属性:

innerHeight:包括滚动条在内的窗口内容部分的高度

innerWidth:包括滚动条在内的窗口内容部分的宽度

outerHeight:整个浏览器的高度,包括界面所有组成部分。

outerWidth:整个浏览器的宽度,包括界面所有组成部分。

pageXOffset:浏览器窗口的滚动条X轴的位置

pageYOffset:浏览器窗口的滚动条Y轴的位置

scrollX:浏览器窗口的滚动条X轴的位置

scrollY:浏览器窗口的滚动条Y轴的位置

属性

document.documentElement document.body
clientHeight 视口内可见内容的大小,不包括滚动的部分和滚动条。
clientWidth
clientLeft

   
clientTop   
offsetHeight 内容大小,并且包括滚动条。
offsetWidth
offsetLeft   
offsetTop   
scrollHeight 滚动内容的大小,包括滚动的部分,但不包括滚动条。
scrollWidth
scrollTop   
scrollWidth   

查询窗口的视口尺寸:

function getViewportSize(w){
w = w || window;

var cWidth,cHeight;

if(w.innerWidth != null){


cWidth = w.innerWidht;


cHeight = w.innerHeight;


return {w:cWidth,h:w.cHeight};

}

if(document.compatMode == "CSS1Compat"){


cWidth = document.documentElement.clientWidth;


cHeight = doument.documentElement.clientHeight;


return {w:cWidth,h:w.cHeight};

}else if(document.compatMode == "BackCompat"){


cWidth = document.body.clientWidth;


cHeight = doument.body.clientHeight;


return {w:cWidth,h:w.cHeight};

}
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
jquery中获取select选中值的代码
Jun 27 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
Jul 01 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
Jun 13 Javascript
jQuery中DOM操作实例分析
Jan 23 Javascript
js实现仿Discuz文本框弹出层效果
Aug 13 Javascript
js正则表达式replace替换变量方法
May 21 Javascript
js+css3实现旋转效果
Jan 20 Javascript
基于javascript实现最简单选项卡切换
Feb 01 Javascript
H5手机端多文件上传预览插件
Apr 21 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
May 01 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
Sep 28 Javascript
vue router总结 $router和$route及router与 router与route区别
Jul 05 Javascript
浅谈javascript事件取消和阻止冒泡
May 26 #Javascript
javascript事件冒泡和事件捕获详解
May 26 #Javascript
解析javascript中鼠标滚轮事件
May 26 #Javascript
JS中字符串trim()使用示例
May 26 #Javascript
JSON字符串和对象之间的转换详解
May 26 #Javascript
Js和JQuery获取鼠标指针坐标的实现代码分享
May 25 #Javascript
Javascript实现飞动广告效果的方法
May 25 #Javascript
You might like
在WIN98下以apache模块方式安装php
2006/10/09 PHP
php excel类 phpExcel使用方法介绍
2010/08/21 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
Cookie 小记
2010/04/01 Javascript
IE6 fixed的完美解决方案
2011/03/31 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
JavaScript从原型到原型链深入理解
2019/06/03 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
八种Vue组件间通讯方式合集(推荐)
2020/08/18 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
详解将Django部署到Centos7全攻略
2018/09/26 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
Django中modelform组件实例用法总结
2020/02/10 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
彪马法国官网:PUMA法国
2019/12/15 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
婚礼新人答谢词
2015/01/04 职场文书
党员带头倡议书
2015/04/29 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
2015年骨干教师工作总结
2015/05/26 职场文书
预备党员入党思想汇报(范文)
2019/08/14 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python
Pytorch可视化的几种实现方法
2021/06/10 Python