• window对象


    在ECMAScript中,BOM(浏览器对象模型)提供了很多对象,用于访问浏览器的功能,这些功能与任何网页内容无关,BOM的核心对象是window,他表示浏览器的一个实例。在浏览器中,window对象有双重角色:既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。这意味着在网页中定义的任何一个对象、变量和函数,都是以window作为Global对象,因此有权访问parseInt()等方法。

    全局作用域

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

    var age = 20;
    function sayAge(){
        console.log(this.age);
    }
    console.log(window.age);    //20
    sayAge();                   //20
    window.sayAge();            //20

    抛开全局变量会变成window对象的属性不谈,定义全局变量与在window对象上直接定义属性还是有差别的:全局变量不能通过delete操作符删除,而直接在window对象上定义的属性可以。

    var bgColor = "red";
    window.color = "pink";
    delete window.bgColor;    //IE<9时抛出错误,其他浏览器中都返回false
    delete window.color;      //IE<9时抛出错误,其他浏览器中都返回true
    console.log(window.bgColor);   //red
    console.log(window.color);     //undefined

    另外,我们知道,在JavaScript中尝试访问未声明的变量会抛出错误,但是通过查询window对象,可以知道某个可能未生命的变量是否存在。

    var newValue = oldValue;   // Uncaught ReferenceError: oldValue is not defined
    var newValue = window.oldValue;  //不会抛出错误,这只是一次属性查询。

    窗口位置

    用来确定和修改window对象位置的属性和方法有很多,IE、Safari、Opera和Chrome都提供screenLeft和screenTop属性,Firefox则提供了screenX和screenY属性,但与screenLeft和screenTop属性并不对应,因此常使用下列三元运算符来取得位置信息。

    var leftPos = (typeof window.screenLeft == 'number') ? window.screenLeft:window.screenX;
    var topPos = (typeof window.screenTop == 'number') ? window.screenTop:window.screenY;

    窗口大小

    不同浏览器中,确定窗口大小的方法不同,在IE9、Safari和Firefox中,outerWidth和outerHeight返回浏览器窗口本身的尺寸;在Opera中,outerWidth和outerHeight表示页面视图容器的大小,innerWidth和innerHeight表示该容器中页面视图区的大小;在Chrome中,outerWidth、outerHeight和innerWidth、innerHeight返回相同的值,即视口大小而非浏览器窗口大小;在IE9、Safari、Firefox和Chrome中,document.documentElement.clientWidth和document.documentElement.clientHeight中保存了页面视口的信息,在IE6中,这些属性必须在标准模式下才有效,如果是混杂模式,必须通过document.body.clientWidth和document.body.clientHeight取得相同信息。

    虽然最终无法确定浏览器窗口本身的大小,但却可以取得页面视口的大小:

    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;
       }
    }

    使用resizeTo()和resizeBy()方法可以调整浏览器窗口的大小,这两个方法都接收两个参数,其中resizeTo()接收浏览器窗口的新宽度和新高度,而resizeBy()接收新窗口与原窗口的宽度和高度之差。

    // 调整到100*100
    window.resizeTo(100,100);
    // 调整到200*150
    window.resizeBy(100,50);
    // 调整到300*300
    window.resizeTo(300,300);

    这两个方法与移动窗口位置的方法类似,也有可能被浏览器禁用,另外,这两个方法不适用于框架,而只能对最外层的window对象使用。

  • 相关阅读:
    第二阶段--个人冲刺--第七天
    学习进度条12
    第二阶段--个人冲刺--第六天
    第二阶段--个人冲刺--第五天
    第二阶段--个人冲刺--第四天
    第二阶段--个人冲刺--第三天
    从小工到专家阅读笔记03
    团队冲刺第一阶段第十天
    团队冲刺第一阶段第九天
    构建之法阅读笔记05
  • 原文地址:https://www.cnblogs.com/yuyujuan/p/9200966.html
Copyright © 2020-2023  润新知