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 研究心得 取得属性的值
Nov 30 Javascript
jquery select下拉框操作的一些说明
Apr 02 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
Sep 29 Javascript
体验js中splice()的强大(插入、删除或替换数组的元素)
Jan 16 Javascript
javascript实现文字图片上下滚动的具体实例
Jun 28 Javascript
解析JSON对象与字符串之间的相互转换
Dec 18 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
Dec 12 Javascript
vue语法自动转typescript(解放双手)
Sep 18 Javascript
JS造成内存泄漏的几种情况实例分析
Mar 02 Javascript
Nuxt页面级缓存的实现
Mar 09 Javascript
基于ajax及jQuery实现局部刷新过程解析
Sep 12 jQuery
微信小程序实现日历小功能
Nov 18 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
编写PHP的安全策略
2006/10/09 PHP
PHP+DBM的同学录程序(5)
2006/10/09 PHP
php header Content-Type类型小结
2011/07/03 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
PHP中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
JavaScript获取当前日期是星期几的方法
2015/04/06 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
javascript 的变量、作用域和内存问题
2017/04/19 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
ajaxfileupload.js实现上传文件功能
2019/04/19 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
Python中实现两个字典(dict)合并的方法
2014/09/23 Python
Python中的推导式使用详解
2015/06/03 Python
Python之re操作方法(详解)
2017/06/14 Python
python实现mysql的读写分离及负载均衡
2018/02/04 Python
Python内置函数reversed()用法分析
2018/03/20 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
完美解决jupyter由于无法import新包的问题
2020/05/26 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
Cotton On香港网站:澳洲时装连锁品牌
2018/11/01 全球购物
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
异常和异常类的概念
2014/09/12 面试题
新郎婚宴答谢词
2014/01/19 职场文书
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
上课迟到检讨书
2014/02/19 职场文书
集体婚礼策划方案
2014/02/22 职场文书
php png失真的原因及解决办法
2021/11/17 PHP