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 相关文章推荐
use jscript List Installed Software
Jun 11 Javascript
img的onload的另类用法
Jan 10 Javascript
JQuery 1.4 中的Ajax问题
Jan 23 Javascript
JavaScript常用函数工具集:lao-utils
Mar 01 Javascript
Javascript基础_简单比较undefined和null 值
Jun 14 Javascript
浅谈Javascript中的函数、this以及原型
Oct 09 Javascript
bootstrap多种样式进度条展示
Dec 20 Javascript
JS实现上传图片的三种方法并实现预览图片功能
Jul 14 Javascript
JS中获取 DOM 元素的绝对位置实例详解
Apr 23 Javascript
详解Angular6 热加载配置方案
Aug 18 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 Javascript
JavaScript实现九宫格拖拽效果
Jun 28 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实现的常见排序算法汇总
2014/09/08 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
php+xml实现在线英文词典查询的方法
2015/01/23 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
JS 控件事件小结
2012/10/31 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
2013/11/26 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
详谈js模块化规范
2017/07/07 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
面包屑导航详解
2017/12/07 Javascript
Vue.set() this.$set()引发的视图更新思考及注意事项
2018/08/30 Javascript
在vue项目中引用Iview的方法
2018/09/14 Javascript
js中实例与对象的区别讲解
2019/01/21 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
Python使用Scrapy爬取妹子图
2015/05/28 Python
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
Python微信公众号开发平台
2018/01/25 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
Python 新建文件夹与复制文件夹内所有内容的方法
2018/10/27 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
python3字符串操作总结
2019/07/24 Python
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
网页设计个人找工作求职信
2013/11/28 职场文书
宿舍保安职务说明书
2014/02/25 职场文书
眼镜促销方案
2014/03/15 职场文书
长城的导游词
2015/01/30 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
Python 实现Mac 屏幕截图详解
2021/10/05 Python
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL