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 相关文章推荐
DOM 脚本编程中的兄弟节点
Oct 31 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
Jun 09 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
Sep 27 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
Dec 18 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
Jan 20 Javascript
javascript结合canvas实现图片旋转效果
May 03 Javascript
JavaScript禁止复制与粘贴的实现代码
May 16 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
Sep 05 Javascript
JavaScript实现音乐自动切换和轮播
Nov 05 Javascript
vuex 动态注册方法 registerModule的实现
Jul 03 Javascript
react-native 实现购物车滑动删除效果的示例代码
Jan 15 Javascript
vue实现书本翻页动画效果实例详解
Apr 08 Vue.js
浅谈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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
用PHP制作的意见反馈表源码
2007/03/11 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP反射机制原理与用法详解
2017/02/15 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
PHP中散列密码的安全性分析
2019/07/26 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
JavaScript建立一个语法高亮输入框实现思路
2013/02/26 Javascript
jquery插件方式实现table查询功能的简单实例
2016/06/06 Javascript
jQuery实现可拖拽3D万花筒旋转特效
2017/01/03 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
Vue 动态组件components和v-once指令的实现
2019/08/30 Javascript
Python编码时应该注意的几个情况
2013/03/04 Python
Python检测网站链接是否已存在
2016/04/07 Python
使用DataFrame删除行和列的实例讲解
2018/04/08 Python
用Python shell简化开发
2018/08/08 Python
详解python模块pychartdir安装及导入问题
2020/10/22 Python
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
商务日语毕业生自荐信
2013/11/23 职场文书
十八大报告观后感
2014/01/28 职场文书
电视购物广告词
2014/03/19 职场文书
医德医风演讲稿
2014/05/20 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
学生安全责任书范本
2014/07/24 职场文书
施工安全协议书范本
2014/09/26 职场文书
婚宴新娘致辞
2015/07/28 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
Window server中安装Redis的超详细教程
2021/11/17 Redis