第8章 BOM——window对象

8.1window对象

BOM的核心对象是window,它表示浏览器的一个实例。既是javascript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。这意味着在网页中定义的任何一个对象、变量和函数,都以window作为其Global对象,因此有权访问parseInt()等方法。

8.1.1全局作用域

由于window对象同时扮演者ECMAScript中Global对象的角色,因此所有在全局作用域中声明的变量、函数都会变成window对象的属性和方法。栗子:

var age = 29;

function sayAge() {

    alert( this.age )

}

alert ( window.age )   //29

sayAge()    // 29

window.sayAge()    //29

解释:我们在全局作用域中定义了变量age和函数sayAge(),它们被自动归在window对象名下。于是,可以通过window.age 访问变量age,通过window.sayAge() 访问函数sayAge()。

8.1.3窗口位置

1:获取窗口位置

screenLeft  /  screenTop  /  screenX  /  screenY

Ie,Safari,Opera,Chrome浏览器提供了screenLeft 和 screenTop属性来确定window窗口位置。

Fixefox , Safari,Chrome 支持screenX 和 screenY。

跨浏览器取得窗口左边和上边的位置。栗子:

var leftPos = ( typeof window.screenLeft == "number")?window.screenLeft : windon.screenX;

var topPos = ( typeof window.screenTop == "number")?window.screenTop : window.screenY;

2:移动窗口位置

moveTo()   接受两个参数。新位置的x和y坐标值,moveBy() 接受水平和垂直方向上移动的像素数。栗子:

// 将窗口移动到屏幕左上角

window.moveTo(0,0);

// 将窗口向下移动100像素

window.moveBy(0,100)

// 将窗口移动到(200,300)

window.moveTo(200,300)

// 将窗口向左移动50像素

window.moveBy(-50,0)

解释:这两个方法可能被浏览器禁用;这两个方法都不适用于框架,只能对最外层的window对象适用。

8.1.4窗口大小

1:获取窗口大小

 innnerWidth  /  innnerHeight  /   outerWidth  /   outerHeight   /  document.documentElement.clientHeight  /  document.documentElement.clientWidth  /  document.body.clientWidth  /  document.body.clientHeight  获取页面视口大小。

栗子:

var pageWidth = window.innerWidth,

     pageHeight = window.innerHeight;

if( typeof pageWidth != "number"){

     if( document.compatMode == "CSS1Compat"){         //  document.compatMode 页面是否处于标准模式

           pageWidth = document.documentElement.clientWidth;

           pageHeight = document.documentElement.clientHeight;

     }else{

           pageWidth = document.body.clientWidth;

           pageHeight = document.body.clientHeight;

     }

}

2:调整窗口大小

resizeTo()  /  resizeBy()  调整浏览器窗口大小。这两个方法接受两个参数。

resizeTo()   接收浏览器窗口的新高度和新宽度。resizeBy()  接收新窗口与原窗口的宽度和高度之差。栗子:

// 调整到 100 * 100

window.resizeTo(100,100)

// 调整到 200*150

window.resizeBy(100,50)

// 调整到 300*300

window.resizeTo(300,300)

8.1.5导航和打开窗口

1:弹出窗口

window.open() 可以导航到一个特定URL,也可以打开一个新的浏览器窗口。

此方法接收4个参数:要加载的URL、窗口目标、一个特定字符串、一个表示新页面是否取代浏览器历史记录中当前加载页面的布尔值。通常只需传第一个参数,最后一个参数只在不打开新窗口的情况下使用。

// 等同于 <a href = "http://www.wrox.com" target = "topFrame" ></a>

window.open("http://www.wrox.com", "topFrame")    

解释:第二个参数也可以是:_self 、_parent 、_top 、_blank

有些浏览器不允许针对主浏览器窗口调整大小或移动位置,但可以通过window.open()创建窗口调整。栗子:

var wroxWin = window.open('http://www.wrox.com','topFrame','height=400,width=400,top=10,left=10,resizeable=yes')

// 调整大小

wroxWin .resizeTo(500,500);

wroxWin.moveTo(100,100);

// close() 方法还可以关闭新打开的窗口

wroxWin.close()   但是这个方法仅适用于通过window.open() 打开的窗口

将opener设置为null就是告诉浏览器新创建的标签页不需要与打开它的标签页通信,因此可以在独立的进程中运行。标签页之间的联系一旦切断,将没有办法恢复。栗子:

wroxWin.opener = null

2:弹出窗口屏蔽程序

如果是浏览器扩展程序或其他程序阻止了弹出窗口,那么window.open()通常会抛出一个错误。因此,想要准确的检测出弹出窗口是否被屏蔽,必须在检测返回值的同时,将对window.open()的调用封装在一个try-catch块中。栗子:

var blocked = false;

try{

    var wroxWin = window.open("http://www.wrox.com","_blank")

   if(wroxWin == null){

         blocked = true;

   }

}catch(ex){

    blocked = true

}

if(blocked){

   alert("the popup was blocked!")

}

8.1.6间歇调用和超时调用

1:setInterval

//不建议传递字符串!
setInterval ("alert('Hello world!') ", 10000); 
//推荐的调用方式
setInterval (function() { 
 alert("Hello world!"); 
}, 10000);

 2:setTimeout

var timeoutId = setTimeout(function() { 
 alert("Hello world!"); 
}, 1000); 
//注意:把它取消
clearTimeout(timeoutId); 

3:替代间歇调用

在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用结束之前启动。
而像前面示例中那样使用超时调用,则完全可以避免这一点。所以,最好不要使用间歇调用

var num = 0; 
var max = 10; 
function incrementNumber() { 
 num++; 
 //如果执行次数未达到 max 设定的值,则设置另一次超时调用
 if (num < max) { 
 setTimeout(incrementNumber, 500); 
 } else { 
 alert("Done"); 
 } 

setTimeout(incrementNumber, 500); 

发布了54 篇原创文章 · 获赞 8 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/yang295242361/article/details/91351506