$8 BOM(瀏覽器對象模型)

瀏覽器對象模型是以window對象為依托的钾菊,window在ES中是全局對象帅矗,因而所有的全局變量和函數(shù)都是它的屬性,并且所有的原生的構(gòu)造函數(shù)也都在它的命名空間下煞烫。

1. window對象:

A. BOM的核心對象浑此;

同時(shí)扮演著全局對象的角色。
全局變量與window對象上定義的屬性區(qū)別:全局變量不能通過delete刪除

    var age=29;
    window.color="red";
    delete window.age;
    delete window.color;
    console.log(age);//29
    console.log(window.color); //undefined
B. 窗口位置

a.窗口相對于屏幕左邊和上邊的位置:

screenLeft, screenTop; //IE Safari Opera Chrome
screenX, screenY; //Safari Chrome Firefox 
var leftPos=(typeof  window.screenLeft == "number")? window.screenLeft : window.screenX;
var topPos=(typeof window.screenTop == "number")? window.screenTop : window.screenY;

b.窗口精確地移動(dòng)到某個(gè)位置:

window.moveBy(0,100) //移動(dòng)了
window.moveTo(0,100) //移動(dòng)到
C. 窗口大兄拖辍:

a.跨瀏覽器確定窗口大小不是一件簡單的事情凛俱,因?yàn)闉g覽器的原因,但是可以確定頁面視口的大幸鹣堋(去掉邊框):

var pageWidth=window.innerWidth;
var pageHight=window.innerHeight;
    
if(typeof pageWidth != "number"){
        if(document.compatMode == "CSS1Compat"){    //標(biāo)準(zhǔn)模式
            pageWidth = document.documentElement.clientWidth;
            pageHeight = document.documentElement.clientHeight;
        }
        else{        //混雜模式
            pageWidth = document.body.clientWidth;
            pageHeight = document.body.clientHeight;
        }
}

b.調(diào)整窗口大小:

window.resizeTo(100,100);
window.resizeBy(100,100);
D. 導(dǎo)航和打開窗口:
window.open()   //打開一個(gè)新的瀏覽器窗口
E. 間歇調(diào)用setInterval和超時(shí)調(diào)用setTimeout

a.超時(shí)調(diào)用:每個(gè)超時(shí)調(diào)用都有一個(gè)唯一的數(shù)值ID瘦棋,可以通過該ID來取消超時(shí)調(diào)用稀火。

    var timeoutId = setTimeout(function(){
        alert("hello");
    },1000);

取消clearTimeout(timeoutId)//在指定的時(shí)間尚未過去之前取消超時(shí)調(diào)用,會導(dǎo)致setTimeout里面的function代碼沒有執(zhí)行赌朋。

b.間歇調(diào)用:直到間歇調(diào)用被取消或者頁面卸載才會停止凰狞。該方法也有其ID。

var num =0;
var max = 10;
var intervalId = null;
    
function incrementNumber(){
        num++;  
        if(num == max){
            clearInterval(intervalId);
        }
        else{
            console.log(num);     //1-9
        }
    }
intervalId = setInterval(incrementNumber,1000)

很少真正使用間歇調(diào)用沛慢,可以使用超時(shí)調(diào)用來模擬間歇調(diào)用赡若,間歇調(diào)用缺點(diǎn):
1.后一個(gè)間歇調(diào)用有可能會在前一個(gè)間歇調(diào)用結(jié)束之前啟動(dòng);
2.間歇調(diào)用需要追蹤其ID团甲,以便于取消間歇調(diào)用逾冬。

var num =0;
var max = 10;
var intervalId = null;  
function incrementNumber(){
        num++;
    //如果執(zhí)行次數(shù)未達(dá)到設(shè)定的值,則設(shè)置另一次超時(shí)調(diào)用
        if(num < max){
            console.log(num);
            setTimeout(incrementNumber,1000);
        }
}   
intervalId = setTimeout(incrementNumber,1000);
F. 系統(tǒng)對話框:

1.alert() (用戶無法控制的對話框躺苦,警告作用)
2.confirm() (用戶可以選擇是否執(zhí)行操作)

    if(confirm("你確定進(jìn)入下一頁嗎身腻?")){
        alert("歡迎")
    }
    else{
        alert("再見")
    }
Paste_Image.png

3.prompt() (用戶可以輸入文本)

    var result=prompt("你叫什么名字?","");
    if(result != null){
        alert("歡迎匹厘,"+result);
    }
Paste_Image.png

2. location對象

a. location對象提供了當(dāng)前頁面的與文檔有關(guān)的信息嘀趟。它既是window的屬性,又是document的屬性愈诚,即window.location==document.location.

b. 作用:解析Url她按,將Url解析為獨(dú)立的片段】蝗幔可以通過location的不同屬性訪問url中的不同信息(hash host hostname href pathname port protocol search)

c.獲取url中的參數(shù):

    function getQueryStringArgs() {
        var qs=location.search.length>0? location.search.substring(1):"";
        var args={};
        var items=qs.length ? qs.split("&"):[];
        var item=null,name=null,value=null;
        for(var i=0;i<items.length;i++){
            item=items[i].split("=");
            name=decodeURIComponent(item[0]);
            value=decodeURIComponent(item[1]);
            if(name.length){
                args[name]=value;
            }
        }
        return args;
    }

d. 位置操作:
打開新的URL地址并且在瀏覽器的歷史記錄中生成記錄(可后退)

    location.
    window.location="http://baidu.com"
    location.assign("http://baidu.com")

打開新的URL并且不生成記錄(不可后退)

    location.replace("http://baidu.com")

重新加載頁面:reload

    location.reload()     //有可能加載瀏覽器緩存頁面
    location.reload(true)  //重新從服務(wù)器進(jìn)行請求

3. navigator對象

主要作用:識別客戶端瀏覽器
a. 檢測插件:plugins數(shù)組中包含插件的各種信息酌泰。

        //非ie瀏覽器有效,因?yàn)閚avigator是NS開發(fā)的匕累,IE不支持宫莱。
        function hasPlugin(name) {
            name=name.toLowerCase();
            for(var i=0;i<navigator.plugins.length;i++){
                if(navigator.plugins[i].name.toLowerCase().indexOf(name)>-1){
                    return true;
                }
            }
            return false;
        }
        console.log(hasPlugin("flash"));

ie瀏覽器需要利用COM對象來進(jìn)行檢測。

4. screen對象

主要用于表示瀏覽器窗口信息哩罪。比如調(diào)整窗口大小時(shí):

    window.resizeTo(screen.availWidth,screen.availHeight)

5. history對象:

保存上網(wǎng)的歷史記錄授霸。
作用:創(chuàng)建前進(jìn)后退按鈕巡验,以及檢測當(dāng)前頁面是否是用戶打開的第一個(gè)頁面。
常見用法:

        history.go(1);
        history.go(-1);
        history.forward();
        history.back();
        history.go("wrox.com");
        if(history.length==0){
            console.log("用戶訪問的第一個(gè)頁面")
        }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碘耳,一起剝皮案震驚了整個(gè)濱河市显设,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌辛辨,老刑警劉巖捕捂,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異斗搞,居然都是意外死亡指攒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門僻焚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來允悦,“玉大人,你說我怎么就攤上這事虑啤∠冻冢” “怎么了?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵狞山,是天一觀的道長全闷。 經(jīng)常有香客問我,道長萍启,這世上最難降的妖魔是什么总珠? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮勘纯,結(jié)果婚禮上姚淆,老公的妹妹穿的比我還像新娘。我一直安慰自己屡律,他們只是感情好腌逢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著超埋,像睡著了一般搏讶。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霍殴,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天媒惕,我揣著相機(jī)與錄音,去河邊找鬼来庭。 笑死妒蔚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肴盏,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼科盛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了菜皂?” 一聲冷哼從身側(cè)響起贞绵,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恍飘,沒想到半個(gè)月后榨崩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡章母,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年母蛛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乳怎。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡彩郊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舞肆,到底是詐尸還是另有隱情焦辅,我是刑警寧澤博杖,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布椿胯,位于F島的核電站,受9級特大地震影響剃根,放射性物質(zhì)發(fā)生泄漏哩盲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一狈醉、第九天 我趴在偏房一處隱蔽的房頂上張望廉油。 院中可真熱鬧,春花似錦苗傅、人聲如沸抒线。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘶炭。三九已至,卻和暖如春逊桦,著一層夾襖步出監(jiān)牢的瞬間眨猎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工强经, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睡陪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像兰迫,于是被迫代替她去往敵國和親信殊。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容

  • ECMAScript 是 JavaScript 的核心逮矛,但如果要在 Web 中使用 JavaScript鸡号,那么 B...
    劼哥stone閱讀 818評論 2 5
  • 1.window對象是最頂層的對象2.window對象有6大屬性(document,frames,history,...
    Miss____Du閱讀 1,177評論 0 3
  • 本節(jié)重點(diǎn) BOM 模型的主要應(yīng)用 windows對象模型 + location對象 + history對象 1. ...
    南航閱讀 1,103評論 0 2
  • JS Window-瀏覽器對象模型 瀏覽器對象模型(BOM)使JS有能力與瀏覽器對話 由于現(xiàn)代瀏覽器幾乎實(shí)現(xiàn)了JS...
    figure_ai閱讀 1,277評論 0 2
  • 寫個(gè)連載小說,字?jǐn)?shù)大約還是挺合適的须鼎,正好有時(shí)間鲸伴,起點(diǎn)的小說都差不多太監(jiān)了,實(shí)在沒動(dòng)力寫晋控,希望這個(gè)不會汞窗。 主角是一個(gè)...
    4715fb6e0401閱讀 215評論 0 0