在IE、FF、Chrome、Opera和Safari中,document.documentElement.clientWidth和document.documentElement.clientHight中保存着页面视口信息。在IE6下,要在标准模式下有效。如果是混杂模式就必须通过document.body.clientWidth和document.body.clientHight取得相同信息。Chrome则不分标准模式还是混杂模式。
虽然最终无法确定浏览器窗口本身的大小,但却可以取得页面视口的大小。
var pageWidth = window.innerWidth, pageHeight = window.innerHeight; if (typeof pageWidth != "number"){ if (document.compatMode == "CSS1Compat"){ pageWidth = document.documentElement.clientWidth; pageHeight = document.documentElement.clientHeight; } else { pageWidth = document.body.clientWidth; pageHeight = document.body.clientHeight; } } alert("Width: " + pageWidth); alert("Height: " + pageHeight);
对于移动设备,window.innerWidth和window.innerHight保存着可见视口,也就是屏幕上页面区域的大小。移动IE浏览器则要通过document.documentElement.clientWidth和document.documentElement.clientHight获取相同信息。
使用resizeTo()和resizeBy()方法都可以调整浏览器窗口大小,两个方法都接收两个参数,resizeTo()接收的是浏览器窗口新宽度和新高度,resizeBy()接收的是新窗口和老窗口的宽度差和高度差。
//调整到100*100 resizeTo(100,100); //调整到200*150 moveBy(100,50);
但是,这两个方法可能会被浏览器禁用。这两个方法也只适用于最外层的window对象,不适用框架。
5.导航和打开窗口
window.open()方法既可以打开一个特定的URL,也可以打开一个新的浏览器窗口。该方法接收4个参数:URL,窗口目标,一个特性字符串和一个表示新页面是否取代当前页面的布尔值。
弹出窗口
各项参数
其中yes/no也可使用1/0;pixelvalue为具体的数值,单位象素。
参数|取值范围|说明
alwaysLowered|yes/no|指定窗口隐藏在所有窗口之后
alwaysRaised|yes/no|指定窗口悬浮在所有窗口之上
depended|yes/no|是否和父窗口同时关闭
directories|yes/no|Nav2和3的目录栏是否可见
height|pixelvalue|窗口高度
hotkeys|yes/no|在没菜单栏的窗口中设安全退出热键
innerHeight|pixelvalue|窗口中文档的像素高度
innerWidth|pixelvalue|窗口中文档的像素宽度
location|yes/no|位置栏是否可见
menubar|yes/no|菜单栏是否可见
outerHeight|pixelvalue|设定窗口(包括装饰边框)的像素高度
outerWidth|pixelvalue|设定窗口(包括装饰边框)的像素宽度
resizable|yes/no|窗口大小是否可调整
screenX|pixelvalue|窗口距屏幕左边界的像素长度
screenY|pixelvalue|窗口距屏幕上边界的像素长度
scrollbars|yes/no|窗口是否可有滚动栏
titlebar|yes/no|窗口题目栏是否可见
toolbar|yes/no|窗口工具栏是否可见
Width|pixelvalue|窗口的像素宽度
z-look|yes/no|窗口被激活后是否浮在其它窗口之上
示例:
window.open('page.html','newwindow','height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no,resizable=no,location=no,status=no')
脚本运行后,page.html将在新窗体newwindow中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。
6.间歇调用和超时调用
JavaScript是单线程语言,但它允许通过设置超时值和间歇时间来调度代码在特定时刻执行。前者是在指定的时间过后执行代码,后者则是每个指定的时间就调用一次。
超时调用setTimeout()
setTimeout() 方法接受两个参数,第一个参数是函数,第二个参数是时间(单位微秒),返回数值ID。
setTimeout( function () { alert("你好!"); },1000);
调用setTimeout()后该方法会返回一个数值ID,表示超时调用,可以通过它取消超时调用。
var timeOutId = setTimeout( function () { alert("你好!"); },1000); clearTimeout(timeOutId);
间歇调用setInterval()
setInterval()方法接受两个参数,第一个参数是函数,第二个参数是时间(单位微秒),返回数值ID
setInterval( function () { alert("你好!"); },1000);
取消调用clearInterval(),接受一个参数间歇调用ID
var intervalId = null; var span = document.createElement("span"); //创建span节点 span.Id="time"; //设置span的id document.body.appendChild(span); //body内添加span function incrementNumber () { var now = new Date(); var timeStr = now.toLocaleTimeString(); span.innerText =timeStr; num++; if (num == 10) { clearInterval(intervalId); //十秒后时间不变了 } } intervalId = setInterval(incrementNumber,1000);
尽量用超时调用替代间歇调用