BOM 窗体相关属性以及页面可见区域的获取方式
1 在IE Safari Oper Chrome 都提供了screenLeft和screenTop属性:
screenLeft : 相对于屏幕左边的距离
screenTop : 相对于屏幕上边的距离
Firefox则在 screenX, screenY属性中提供形同的窗口位置信息,Safari,Chrome同样也支持这两个属性。Oper虽然支持但是两个属性表现不一致, 尽量避免在Oper中使用screenTop和screentLeft
兼容各种浏览器可以使用这种方式:
var leftPos = (typeof window.screenLeft=="number")?window.screenLeft:window.screenX;
var topPos = (typeof window.screenTop=="number")?window.screenTop:window.screenY;
注意: IE,Oper中 scrrenLeft与screenTop 表示的是屏幕左边和上边到Window对象表示的页面可见区域的距离。换句话说,如果window对象是最外层对象,而且浏览器是紧贴屏幕最上端-----即y轴坐标为0,那么ScreenTop的值就是位于页面可见区域上方的浏览器工具栏的像素高度;
Safari Firefox Chrome中 screenTop或screenY保存的是浏览器窗体相对于屏幕的坐标值,即在窗口的y轴左边为0时返回0
2 关于窗体移动的两个函数:
moveTo,moveBy 都接收两个参数,前者接收新位置的x和y坐标值 后者接收的是水平和垂直方向的移动量
moveTo(0,0)将窗体移动到屏幕的左上角
moveBy(0,100)将窗体往下移动100px
注意:这两个函数可能会被浏览器禁用;而且在Oper和IE7(更高的版本)中默认是禁用的。另外这两个方法不适用于框架,只适合于最外层的window对象使用。
3 窗体大小
IE9+ Firefox Safari Opera 和 Chrome 均为此提供了四个属性: innerWidth,innerHeight,outerWidth,outerHeight.
在各个浏览器的表现不一样:
IE9+ Firefox Safari Opera 中 outerWidth outerHeight返回浏览器窗口本身的尺寸(无论丛那个window对象还是从某个框架访问)。
特殊情况在Chrome中 outerWidth 与innerWidth 相等,既视口(vierport)大小而非浏览器窗口的大少;
4 在IE8之前没有提供取得当前浏览器窗口大小的方法,不过dom提供了获取页面可见区域的相关信息。
在IE Firefox Safari Opera 和 Chrome中,document.documentElement.clientWidth 和 document.documentElement.clientHeight中保存了页面视口的信息。
注意:IE6中标准模式才有用,在混杂模式,就必须通过document.body.clientWidth和 document.body.clientHeight取得相同信息。
在混杂模式下的Chrome中 无论事document.documentElement 与 document.body 中的ClientWidth与ClientHeight属性,都可以取得视口的大小。
虽然最终无法确定浏览器窗口本身大小,但却可以取得页面视口的大小,如下所示。
var pageWidth = window.innerWidth;
pageHeight = window.innerHeight;
if(typeof pageWidth != "number"){
if(document.compatMode == "CSSCompat"){ // document.compatMode 标准模式
pageWidth = document.documentElement.clientWidth;
pageHeight = document.documentElement.clientHeight;
}else{
pageWidth = document.body.clientWidth;
pageHeight = document.body.clientHeight;
}
}
在移动设备上,window.innerHeight,window.innerWidth保存着可见视口,即屏幕可见区域的大小。在移动IE浏览器是不支持innerHeight与innerWidth,不过可以通过document.documentElement.clientWidht与document.documentElement.clientHeight取得相同的信息,随着页面缩放这些值也跟着变化。
在其他移动浏览器中,document.documentElement度量的是布局视口,即渲染后页面的实际大小(与可见视口不同,可见视口只是整个页面中的一小部分,通过调整页面)。移动IE浏览器把布局视口的信息保存在document.body.clentWidth和document.body.clientHeight中,这些值不会随着页面缩放变化。
5 间歇调用和超时调用
JavaScript是单线程语言,但它允许通过设置超时时间和间歇时间值来调度代码在特定的时候执行。前者是在指定的时间过后执行代码,而后者则是每个制定时间就执行一次代码。
超时调用需要使用window对象的setTimeout()方法接收两个参数; @ID有一个返回值
第一个参数:执行代码 第二个参数: 以毫秒表示的时间(即执行代码前需要等待多少毫秒)。第一个参数可以是一个包含JavaScript代码的字符串(就和在eval()函数中使用字符串一样),也可以是一个函数。例如
//不建议传递字符串 setTimeout("alert('Hello world')",1000); //推荐的调用方式 setTimeout(function(){alert('Hello World!');},1000)
两种方式都一样可以弹出对话框,但是第一种方式可能影响性能的损失,因此不推荐使用字符串作为第一个参数。
函数不一定在第二个参数指定的时间执行,这是为什么尼?
由于JavaScript是一个单线程的解释器,因此一定时间内只能执行一段代码。为了控制要执行的代码,就有一个JavaScirpt任务队列。这些任务会按照加入队列顺序执行。setTimeout()的第二个参数告诉JavaScirpt再过多长时间执行当前任务添加到队列。如果队列是空的,那么添加的代码会立即执行;如果队列不是空的,那么它就要等前面的代码执行完了以后再执行。
那怎么来移除setTimeout尼?
调用setTimeout()之后,该 方法会返回一个数值ID,表示超时调用。这个超时调用ID是计划执行代码的唯一标识符,可以通过它来取消超时调用。要取消尚未执行的超时调用计划,可以调用clearTimeout()方法并将相应的超时调用ID作为参数传递给它,如下
//设置超时调用 var timeoutId= setTimeout(function(){
alert("hello world"); },1000); //注意:把它取消 clearTimeout(timeoutId);
间歇调用使用setInterval() 工作模式和超时调用模式类似;一般项目中很少使用这种方式。
6 系统对话框
浏览器通过alert(),confirm()和prompt()方法可以调用系统对话框向用户显示消息。
(1) 系统对话框与在浏览器中显示的网页没有关系,也不包含HTML。
(2) 它们外观由操作系统及浏览器设置决定,而不是由CSS决定。
(3) 通过这几个方法打开的对话都是同步和模态的。也就是说,显示这些对话框的时候代码回停止执行,而关掉这些对话框又会恢复执行。
7 location对象
提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。
location即使window对象属性,也是document对象的属性;换句话说,window.location和document.location引用的是同一个对象。
用处: location对象的用处不只是表现在它保存着当前文档的信息,还表现在它将url解析为独立的片段,让开发人员可以通过不同的属性访问这些片段。下列列出location对象所以属性
Location
接口表示其关联的对象所展示的页面的地址等信息,对该对象的修改会反映到关联的对象上。Document
和 Window
接口都有一个关联的Location
,可以分别用Document.location
和Window.location
来访问它们对应的Location。
属性
href
- 包含整个URL的一个
DOMString
protocol
- 包含URL对应协议的一个
DOMString
,最后有一个":"。 host
- 包含了域名的一个
DOMString
,可能在该串最后带有一个":"并跟上URL的端口号。 hostname
- 包含URL域名的一个
DOMString
。 port
- 包含端口号的一个
DOMString
。 pathname
- 包含URL中路径部分的一个
DOMString
,开头有一个“/"。
search
- 包含URL参数的一个
DOMString
,开头有一个“?”
。 hash
- 包含块标识符的
DOMString
,开头有一个“#”。
username
- 包含URL中域名前的用户名的一个
DOMString
。 password
- 包含URL域名前的密码的一个
DOMString
。 origin
只读- 包含页面来源的域名的标准形式
DOMString
。
方法
Location
没有继承任何方法,但实现了来自URLUtils
的方法。
Location.assign()
- 加载给定URL的内容资源到这个Location对象所关联的对象上。
Location.reload()
- 重新加载来自当前 URL的资源。他有一个特殊的可选参数,类型为
Boolean
,该参数为true时会导致该方法引发的刷新一定会从服务器上加载数据。如果是false
或没有制定这个参数,浏览器可能从缓存当中加载页面。 Location.replace()
- 用给定的URL替换掉当前的资源。与
assign()
方法不同的是用replace()
替换的新页面不会被保存在会话的历史History
中,这意味着用户将不能用后退按钮转到该页面。 URLUtils.toString()
- 返回一个
DOMString
,包含整个URL。 它和读取URLUtils.href
的效果相同。但是用它是不能够修改Location的值的。
BOM 窗体相关属性以及页面可见区域的获取方式的更多相关文章
- EXTJS 4.2 资料 控件之Window窗体相关属性的用法
最大化,最小化,是否显示关闭按钮 var win_CommonPicLibMultiple = Ext.create("Ext.window.Window", { title: & ...
- content相关属性
content属性值 : width:可视区域的宽度,值可为数字或关键词device-width height:同width intial-scale:页面首次被显示是可 ...
- css中的大小、定位、轮廓相关属性
css中的大小.定位.轮廓相关属性 1.通过height.width属性控制组件大小 height:高度,可以设置任何有效的距离值: width:宽度,可以设置任何有效的属性值: max-height ...
- Activity Intent Flags及Task相关属性
转自http://www.cnblogs.com/lwbqqyumidi/p/3775479.html 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式 ...
- Android总结篇系列:Activity Intent Flags及Task相关属性
同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 ...
- IOS开发UI基础UITextFidle相关属性
UITextFidle相关属性 • enablesReturnKeyAutomatically默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. ...
- css margin的相关属性,问题及应用
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=48 引言:margin ...
- 【转】Android总结篇系列:Activity Intent Flags及Task相关属性
[转]Android总结篇系列:Activity Intent Flags及Task相关属性 同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http:// ...
- BOM下的属性和方法---上
-------------BOM------------------------------------------------ 三个系统对话框 浏览器可以通过alert().confirm()和 ...
随机推荐
- GDI+(Graphics Device Interface)
1创建画布(创建Graphics对象) Bitmap bitmap = new Bitmap(80,80); Graphics g=Graphics.FromImage(bitmap); 2创建Pen ...
- iOS_SN_BlueTooth (二)iOS 连接外设的代码实现
原文:http://www.cocoachina.com/ios/20150917/13456.html?utm_source=tuicool&utm_medium=referral 上一篇文 ...
- Python爬虫——抓取贴吧帖子
抓取百度贴吧帖子 按照这个学习教程,一步一步写出来,中间遇到很多的问题,一一列举 首先, 获得 标题 和 贴子总数 # -*- coding:utf-8 -*- #!/user/bin/python ...
- [Database] Deadlock avoidance protocol
如何避免Deadlock,如果我们能提前知道各个Process对于资源的需求情况,我们就可以用Banker's algorithm (银行家算法) 来解决问题.可是这在现在中不好实现,因为很难提前知道 ...
- lunix安装jdk(rpm格式)
1.下载后,首先把jdk-7u3-linux-x64.rpm复制到/usr/local/src#cp jdk-7u3-linux-x64.rpm /usr/local/src/2.给所有用户添加可执行 ...
- cobbler之ks文件示例
#platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration,关闭防火墙 firewall --disabl ...
- Is Fibo
fib = {} f = [1, 1] fib[1] = True while f[-1] < 1e10: # 不断的计算,然后加在尾部,最后比对“in” f.append(f[-1]+f[-2 ...
- python 远程统计文件
#!/usr/bin/python #encoding=utf-8 import time import os import paramiko import multiprocessing #统计文件 ...
- NAS4Free 安装配置(一)开箱图
拆箱记录 东西不错,做工很好 包装箱 背面 正面(未装前面板) 底部 前面板打开后 打开上盖 开机正面图
- Java开发工具与程序调试
开发工具:MyEclipse,Eclipse等. 程序调试: (1)断点:设置断点是程序调试中必不可少的手段,Java调试器每次遇到程序断点时都会将当前线程挂起,即暂停当前程序的运行.(在Eclip ...