JS之BOM

BOM是什么

BOM(Browser Object Model)是指瀏覽器對象模型年扩,是用于描述這種對象與對象之間的層次關(guān)系的模型待侵,瀏覽器對象模型提供了獨立于內(nèi)容的胶滋,可以與瀏覽李窗口進(jìn)行互動的對象結(jié)構(gòu)。

BOM由多個對象組成皆的,其中代表瀏覽器窗口的window對象是BOM的頂層對象覆履,其他對象都是該對象的子對象。

BOM的核心

window

BOM的核心是window對象费薄,它表示瀏覽器的一個實例硝全。

在瀏覽器中,window對象既是JavaScript訪問瀏覽器窗口的一個接口楞抡,又是ECMAscript規(guī)定的Global對象伟众,這就意味著在網(wǎng)頁中定義的任意變量,函數(shù)召廷,對象都是以window作為Global對象凳厢。

所有在全局作用域中聲明的變量、函數(shù)竞慢、對象都活作為window的屬性和方法先紫。

var age = 18;

function ages(){
    console.log(age);
}

console.log(window.age); //18
window.ages(); //18

window對象屬性

  • window.innerHeight和window.innerWidth

這兩個屬性返回網(wǎng)頁的css布局占據(jù)的瀏覽器窗口的寬度和高度,單位是像素筹煮。

當(dāng)用戶放大網(wǎng)頁遮精,這兩個屬性會變小

注意,這兩個屬性值包括滾動條的高度和寬度败潦。

  • scrollX和scrollY
    • scrollX:滾動條橫向偏移
    • scrollY:滾動條縱向偏移

這兩個值隨著滾動位置變化而變化

  • scrollTo本冲、scrollBy准脂、scroll

scrollToscroll方法改變滾動條的位置到指定坐標(biāo)

window.scrollTo(0,200); //滾動條移動到200px處

兩個參數(shù)分別是水平、垂直方向偏移

scrollBy可以相對向前位置移動滾動條眼俊,而不是移動絕對位置

window.scrollBy(0.50); //滾動條向下移動50px

  • window.frames

window.frames返回一個類似數(shù)組的對象意狠,成員為頁面內(nèi)的所有框架粟关,包括frame元素和iframe元素疮胖。

window.frames的每個成員對應(yīng)的框架內(nèi)的窗口(即框架的window對象),獲取每個框架的DOM樹闷板,需要使用window.frames[0].document澎灸。

var iframe = window.getElementsByTagName("iframe")[0];
var iframeTitle = iframe.contentWindow.title;

上面代碼用于獲取框架頁面的標(biāo)題。

iframe元素遵守同源策略遮晚,只有當(dāng)父頁面與框架頁面來自同一個域名性昭,兩者之間才可以用腳本通信,否則只有使用window.postMessage方法县遣。

在iframe框架內(nèi)部糜颠,使用window.parent指向父頁面。

  • navigator

window對象的navigator屬性萧求,指向一個包含瀏覽器相關(guān)信息的對象其兴。

navigator.userAgent屬性返回瀏覽器的User-Agent字符串,用來表示瀏覽器的種類夸政。

console.log(window.navigator.userAgent);  //"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36"

通過userAgent屬性識別瀏覽器元旬,不是一個好辦法,因為必須考慮所有的情況(不同的瀏覽器守问,不同的版本)匀归,非常麻煩,而且無法保證未來的適用性耗帕,各種上網(wǎng)設(shè)備層出不窮穆端,很難列舉,所以現(xiàn)在一般不再識別瀏覽器了仿便,而是使用“功能識別”方法体啰,即逐一測試當(dāng)前瀏覽器是否支持要用到的JavaScript功能。

  • screen

screen對象包含了顯示設(shè)備的信息

//顯示設(shè)備的高度探越,單位是像素
screen.height

//顯示設(shè)備的寬度狡赐,單位是像素
screen.width

一般使用上面兩個屬性,了解設(shè)備的分辨率钦幔。除非調(diào)整顯示器的分辨率或者更換設(shè)備枕屉,否則這兩個值可以看做常量,不會發(fā)生變化鲤氢。

顯示器的分辨率與瀏覽器的設(shè)置無關(guān)搀擂,縮放網(wǎng)頁并不會改變分辨率西潘。

  • window.getComputedStyle

getComputedStyle是一個可以獲取搶錢元素所有最終使用的CSS屬性值。返回的是一個CSS樣式聲明對象([object CSSStyleDeclaration])

//如果沒有偽類則不設(shè)置
var style = window.getComputedStyle("元素"哨颂,“偽類”)喷市;

var div = document.querySelector(".test");
console.log(getComputedStyle(div));

currentStyle

這個是低版本IE的實現(xiàn)方案,我們可以寫個兼容的方式

element.currentStyle ? element.currentStyle : window.getComputedStyle(element);

  • URL編碼和解碼

JavaScript提供了兩種URL的編碼/解碼方式

  1. encodeURI()/decodeURI()
  2. encodeURIComponent()/decodeURIComponent()

encodeURI()encodeURIComponent()的區(qū)別:

encodeURI()不會對下列字符編碼

1. ASCII字母
2. 數(shù)字
3. ~!@#$&()+:/,;?+'

encodeURIComponent()方法不會對下列字符編碼

1. ASCII字母
2. 數(shù)字
3. ~!*()'

從上面可以看出威恼,encodeURIComponent()方法比encodeURI()方法編碼范圍大品姓。

實際例子來說,encodeURIComponent()會把http://編碼成http%3A%2F%2F箫措,而encodeURI不會

  • alert()腹备、prompt()、confirm()(不常用)

alert()斤蔓、prompt()植酥、confirm()都是瀏覽器用來與用戶互動的方法。它們會彈出不同的對話框弦牡,要求用戶做出回應(yīng)友驮。

需要注意的是,alert()驾锰、prompt()卸留、confirm()這三個方法彈出的對話框,都是瀏覽器統(tǒng)一規(guī)定的樣式稻据,是無法定制的艾猜。(這是現(xiàn)在不常用的原因)

alert方法彈出的對話框,只有一個“確定”按鈕捻悯,一般用來通知用戶的某些信息匆赃。用戶只有點擊“確定”按鈕,對話框才會消失今缚。在對話框彈出期間算柳,瀏覽器窗口處于凍結(jié)狀態(tài),如果不點“確定”按鈕姓言,用戶什么也干不了瞬项。

prompt方法彈出的對話框,在提示文字的下方還有一個輸入框何荚,要求用戶輸入信息囱淋,并有“確定”和“取消”兩個按鈕,一般用來獲取用戶輸入的數(shù)據(jù)餐塘。返回值是一個字符串(有可能為空)或者null妥衣,具體分為三種情況:

  1. 用戶輸入信息,并點擊“確定”,則用戶輸入的信息就是返回值
  2. 用戶沒有輸入信息税手,直接點擊“確定”蜂筹,則輸入框的默認(rèn)值就是返回值
  3. 用戶點擊了“取消”(或者按了Esc按鈕),返回值是null

confirm方法彈出的對話框芦倒,除了提示信息之外艺挪,只有“確定”和“取消”兩個按鈕,一般用來征詢用戶的意見兵扬。返回值是一個布爾值麻裳,如果用戶點擊“確定”,則返回true周霉,如果用戶點擊“取消”掂器,則返回false。

//alert
alert("這是一個彈出層");

//prompt
var result = prompt("您的年齡俱箱?", 18); //18是設(shè)置的默認(rèn)值,默認(rèn)顯示

//confirm
var results = confirm("吃了嗎灭必?");

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末狞谱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子禁漓,更是在濱河造成了極大的恐慌跟衅,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件播歼,死亡現(xiàn)場離奇詭異伶跷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)秘狞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進(jìn)店門叭莫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人烁试,你說我怎么就攤上這事雇初。” “怎么了减响?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵靖诗,是天一觀的道長。 經(jīng)常有香客問我支示,道長刊橘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任颂鸿,我火速辦了婚禮促绵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己绞愚,他們只是感情好叙甸,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著位衩,像睡著了一般裆蒸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糖驴,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天僚祷,我揣著相機(jī)與錄音,去河邊找鬼贮缕。 笑死辙谜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的感昼。 我是一名探鬼主播装哆,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼定嗓!你這毒婦竟也來了蜕琴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤宵溅,失蹤者是張志新(化名)和其女友劉穎凌简,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恃逻,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡雏搂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了寇损。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凸郑。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖润绵,靈堂內(nèi)的尸體忽然破棺而出线椰,到底是詐尸還是另有隱情,我是刑警寧澤尘盼,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布憨愉,位于F島的核電站,受9級特大地震影響卿捎,放射性物質(zhì)發(fā)生泄漏配紫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一午阵、第九天 我趴在偏房一處隱蔽的房頂上張望躺孝。 院中可真熱鬧享扔,春花似錦、人聲如沸植袍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽于个。三九已至氛魁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厅篓,已是汗流浹背秀存。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留羽氮,地道東北人或链。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像档押,于是被迫代替她去往敵國和親澳盐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

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

  • ??ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript掀淘,那么...
    霜天曉閱讀 878評論 0 0
  • 第3章 基本概念 3.1 語法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,126評論 0 21
  • BOM(Browser Object Model) 是指瀏覽器對象模型 用于描述這種對象與對象之間層次關(guān)系的模型,...
    好奇男孩閱讀 792評論 0 3
  • 概述 在瀏覽器中油昂,window對象(注意革娄,w為小寫)指當(dāng)前的瀏覽器窗口。它也是所有對象的頂層對象冕碟。 “頂層對象”指...
    許先生__閱讀 1,668評論 0 6
  • ★【知識點】: 1拦惋、掌握什么是BOM2、掌握BOM的核心-window對象3安寺、掌握window對象的控制厕妖、彈出窗口...
    越IT閱讀 2,445評論 0 2