進階篇:BOM(13-1)

饑人谷進階學習第 13 天

BOM

瀏覽器對象模型,是用于描述這種對象與對象之間層次關系的模型,瀏覽器對象模型提供了獨立于內容的、可以與瀏覽器窗口進行互動的對象結構。BOM由多個對象組成,其中代表瀏覽器窗口的Window對象是BOM的頂層對象,其他對象哦都是該對象的子對象

window

BOM 的核心是window對象,它表示瀏覽器的一個實例。在瀏覽器中,即是javascript訪問瀏覽器窗口的一個接口,又是ECMAScript規定的Global對象,這就意味著在網頁中定義的任意變量、函數、對象都是以window作為Global對象。

所有在全局作用域中聲明的變量、函數、對象都會作為window的屬性和方法

window屬性

window.innerHeight、window.innerWidth
兩個屬性返回網頁的CSS布局占據的瀏覽器窗口的高度和寬度,單位為像素。很顯然,當用戶放大網頁的時候(比如將網頁從100%的大小放大為200%),這兩個屬性會變小。

scrollX、scrollY
滾動條橫向偏移
滾動條縱向偏移
這兩個值隨著滾動位置變化而變化

scrollTo、scrollBy、scroll
通過方法scrollTo或者scroll改變滾動條位置到指定坐標
window.scrollTo(0,300); // 滾動條移動到300px處

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

scrollBy可以相對于當前位置移動滾動條,不是移動到絕對位置
scrollBy(0,100); // 滾動條下移100px

window.frames
返回一個類似數組的對象,成員為頁面內的所有框架,包括frame元素和iframe元素。window.frames的每個成員對應的是框架內的窗口(即框架的window對象),獲取每個框架的DOM樹,需要使用window.frames[0].document。

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

用于獲取框架頁面的標題

iframe元素遵守同源政策,只有當父頁面與框架頁面來自同一個域名,兩者之間才可以用腳本通信,否則只有使用window.postMessage方法。

在iframe框架內部,使用window.parent指向父頁面。

navigator
Window對象的navigator屬性,指向一個包含瀏覽器相關信息的對象。

例如:navigator.userAgent屬性返回瀏覽器的User-Agent字符串,用來標示瀏覽器的種類。但通過此屬性識別瀏覽器不是一個好方法(必須考慮所有情況:不同瀏覽器,不同版本,很麻煩無法保證未來的適用性)

現在一般不再識別瀏覽器了,而是使用“功能識別”方法,即逐一測試當前瀏覽器是否支持要用到的JavaScript功能。

screen
此對象包含了顯示設備的信息

screen.height // 顯示設備的高度(像素)
screen.width // 顯示設備的寬度(像素)

一般使用以上兩個屬性了解設備的分辨率。除調整顯示器的分辨率,否則這兩個值可以看作常量。

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

var style = window.getComputedStyle("元素", "偽類");

var div = document.getElementById('test');  // 沒有偽類
console.log(getComputedStyle(div).width);

currentStyle
低版本IE的實現方案,可以寫個兼容的方式

element.currentStyle ?
    element.currentStyle : window.getComputedStyle(element, null)

URL的編碼/解碼方法

JS提供四個URL的編碼/解碼方法

  1. decodeURI()
  2. decodeURIComponent()
  3. encodeURI()
  4. encodeURIComponent()

區別
encodeURI方法不會對下列字符編碼

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

encodeURIComponent方法(范圍較大)不會對下列字符編碼

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

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

alert()、prompt()、confirm()
瀏覽器用來與用戶互動的方法。會彈出不同的對話框,要求用戶做出回應。(不常用)
這三個方法彈出的對話框,都是瀏覽器統一規定的式樣,是無法定制的。

alert方法彈出的對話框,只有一個“確定”按鈕,往往用來通知用戶某些信息。用戶只有點擊“確定”按鈕,對話框才會消失。在對話框彈出期間,瀏覽器窗口處于凍結狀態,如果不點“確定”按鈕,用戶什么也干不了。

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

  1. 用戶輸入信息,并點擊“確定”,則用戶輸入的信息就是返回值。
  2. 用戶沒有輸入信息,直接點擊“確定”,則輸入框的默認值就是返回值。
  3. 用戶點擊了“取消”(或者按了Escape按鈕),則返回值是null。
// 格式
var result = prompt(text[, default]);

// 實例
var result = prompt('您的年齡?', 25)

prompt方法的第二個參數是可選的,但是如果不提供的話,IE瀏覽器會在輸入框中顯示undefined。因此,最好總是提供第二個參數,作為輸入框的默認值。

confirm方法彈出的對話框,除了提示信息之外,只有“確定”和“取消”兩個按鈕,往往用來征詢用戶的意見。

// 格式
var result = confirm(message);

confirm方法返回一個布爾值,如果用戶點擊“確定”,則返回true;如果用戶點擊“取消”,則返回false。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容

  • ??JavaScript 與 HTML 之間的交互是通過事件實現的。 ??事件,就是文檔或瀏覽器窗口中發生的一些特...
    霜天曉閱讀 3,516評論 1 11
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 27,552評論 1 45
  • ??ECMAScript 是 JavaScript 的核心,但如果要在 Web 中使用 JavaScript,那么...
    霜天曉閱讀 886評論 0 0
  • Swift1> Swift和OC的區別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,120評論 1 32
  • 第3章 基本概念 3.1 語法 3.2 關鍵字和保留字 3.3 變量 3.4 數據類型 5種簡單數據類型:Unde...
    RickCole閱讀 5,142評論 0 21