真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

JavaScript的BOM技術(shù)怎么用

這篇文章主要講解了“JavaScript的BOM技術(shù)怎么用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“JavaScript的BOM技術(shù)怎么用”吧!

創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)常州,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

JavaScript的BOM技術(shù)怎么用

1、BOM概述

  • BOM = Browser Object Model 瀏覽器對(duì)象模型

  • 它提供了獨(dú)立于內(nèi)容而與瀏覽器窗口進(jìn)行交互的對(duì)象,其核心對(duì)象是 window

  • BOM 由一系列相關(guān)的對(duì)象構(gòu)成,并且每個(gè)對(duì)象都提供了很多方法與屬性

  • BOM 缺乏標(biāo)準(zhǔn),JavaScript 語法的標(biāo)準(zhǔn)化組織是 ECMA, DOM 的標(biāo)準(zhǔn)化組織是 W3C, BOM最初是Netscape 瀏覽器標(biāo)準(zhǔn)的一部分

DOMBOM
文檔對(duì)象模型瀏覽器對(duì)象模型
DOM 就是把文檔當(dāng)作一個(gè)對(duì)象來看待瀏覽器當(dāng)作一個(gè)對(duì)象來看待
DOM 的頂級(jí)對(duì)象是documentBOM 的頂級(jí)對(duì)象是window
DOM 主要學(xué)習(xí)的是操作頁面元素BOM 學(xué)習(xí)的是瀏覽器窗口交互的一些對(duì)象
DOM 是 W3C 標(biāo)準(zhǔn)規(guī)范BOM 是瀏覽器廠商在各自瀏覽器上定義的,兼容性較差

1.1、BOM的構(gòu)成

JavaScript的BOM技術(shù)怎么用

  • BOM 比 DOM 更大。它包含 DOM。

  • window 對(duì)象是瀏覽器的頂級(jí)對(duì)象,它具有雙重角色

  • 它是 JS 訪問瀏覽器窗口的一個(gè)接口

  • 它是一個(gè)全局對(duì)象。定義在全局作用域中的變量、函數(shù)都會(huì)變成 window 對(duì)象的屬性和方法

  • 在調(diào)用的時(shí)候可以省略 window,前面學(xué)習(xí)的對(duì)話框都屬于 window 對(duì)象方法,如 alert()、prompt()等。

  • 注意:window下的一個(gè)特殊屬性 window.name

// 定義在全局作用域中的變量會(huì)變成window對(duì)象的屬性
var num = 10;
console.log(window.num);
// 10

// 定義在全局作用域中的函數(shù)會(huì)變成window對(duì)象的方法
function fn() {
    console.log(11);
}
console.fn();
// 11

var name = 10;  //不要用這個(gè)name變量,window下有一個(gè)特殊屬性window.name
console.log(window.num);

2、window 對(duì)象的常見事件

2.1、窗口加載事件

window.onload是窗口(頁面)加載事件,當(dāng)文檔內(nèi)容完全加載完成會(huì)觸發(fā)該事件(包括圖像,腳本文件,CSS文件等),就調(diào)用的處理函數(shù)。

window.onload = function(){
    };// 或者window.addEventListener("load",function(){});

注意:

  • 有了window.onload就可以把JS代碼寫到頁面元素的上方

  • 因?yàn)?code>onload是等頁面內(nèi)容全部加載完畢,再去執(zhí)行處理函數(shù)

  • window.onload 傳統(tǒng)注冊(cè)事件方式,只能寫一次

  • 如果有多個(gè),會(huì)以最后一個(gè)window.onload為準(zhǔn)

  • 如果使用addEventListener 則沒有限制

document.addEventListener('DOMContentLoaded',function(){})

接收兩個(gè)參數(shù):

  • DOMCountentLoaded事件觸發(fā)時(shí),僅當(dāng)DOM加載完成,不包括樣式表,圖片,flash等等

  • 如果頁面的圖片很多的話, 從用戶訪問到onload觸發(fā)可能需要較長的時(shí)間

  • 交互效果就不能實(shí)現(xiàn),必然影響用戶的體驗(yàn),此時(shí)用 DOMContentLoaded事件比較合適。

2.1.1、區(qū)別

  • load等頁面內(nèi)容全部加載完畢,包括頁面dom元素,圖片,flash,css等

  • DOMContentLoaded 是DOM加載完畢,不包含圖片 flash css 等就可以執(zhí)行,加載速度比load更快一些

2.2、調(diào)整窗口大小事件

window.onresize 是調(diào)整窗口大小加載事件,當(dāng)觸發(fā)時(shí)就調(diào)用的處理函數(shù)

window.onresize = function() {}// 或者window.addEventListener('resize',function(){});
  • 只要窗口大小發(fā)生像素變化,就會(huì)觸發(fā)這個(gè)事件

  • 我們經(jīng)常利用這個(gè)事件完成響應(yīng)式布局。window.innerWidth 當(dāng)前屏幕的寬度


    
    

3、定時(shí)器

window 對(duì)象給我們提供了兩個(gè)定時(shí)器

  • setTimeout()

  • setInterval()

3.1、setTimeout()定時(shí)器

setTimeout()方法用于設(shè)置一個(gè)定時(shí)器,該定時(shí)器在定時(shí)器到期后執(zhí)行調(diào)用函數(shù)。

window.setTimeout(調(diào)用函數(shù),[延遲的毫秒數(shù)]);

注意

  • window可以省略

  • 這個(gè)調(diào)用函數(shù)

    • 可以直接寫函數(shù)

    • 或者寫函數(shù)名

    • 或者采取字符串 ‘函數(shù)名()’(不推薦)

  • 延遲的毫秒數(shù)省略默認(rèn)是0,如果寫,必須是毫秒

  • 因?yàn)槎〞r(shí)器可能有很多,所以我們經(jīng)常給定時(shí)器賦值一個(gè)標(biāo)識(shí)符

  • setTimeout() 這個(gè)調(diào)用函數(shù)我們也稱為回調(diào)函數(shù)callback

  • 普通函數(shù)是按照代碼順序直接調(diào)用,而這個(gè)函數(shù),需要等待事件,事件到了才會(huì)去調(diào)用這個(gè)函數(shù),因此稱為回調(diào)函數(shù)。


    

3.2、clearTimeout()停止定時(shí)器

  • clearTimeout()方法取消了先前通過調(diào)用 setTimeout()建立的定時(shí)器

window.clearTimeout(timeoutID)

注意

  • window可以省略

  • 里面的參數(shù)就是定時(shí)器的標(biāo)識(shí)符


    
    

3.3、setInterval()定時(shí)器

  • setInterval()方法重復(fù)調(diào)用一個(gè)函數(shù),每隔這個(gè)時(shí)間,就去調(diào)用一次回調(diào)函數(shù)

window.setInterval(回調(diào)函數(shù),[間隔的毫秒數(shù)]);
  • window可以省略

  • 這個(gè)回調(diào)函數(shù):

    • 可以直接寫函數(shù)

    • 或者寫函數(shù)名

    • 或者采取字符 ‘函數(shù)名()’

  • 第一次執(zhí)行也是間隔毫秒數(shù)之后執(zhí)行,之后每隔毫秒數(shù)就執(zhí)行一次


    

3.4、clearInterval()停止定時(shí)器

  • clearInterval ( ) 方法取消了先前通過調(diào)用 setInterval() 建立的定時(shí)器

注意

  • window可以省略

  • 里面的參數(shù)就是定時(shí)器的標(biāo)識(shí)符


    開啟定時(shí)器
    停止定時(shí)器
    

3.5、this指向

  • this的指向在函數(shù)定義的時(shí)候是確定不了的,只有函數(shù)執(zhí)行的時(shí)候才能確定this到底指向誰

現(xiàn)階段,我們先了解一下幾個(gè)this指向

  • 全局作用域或者普通函數(shù)中this指向全局對(duì)象window(注意定時(shí)器里面的this指向window)

  • 方法調(diào)用中誰調(diào)用this指向誰

  • 構(gòu)造函數(shù)中this指向構(gòu)造函數(shù)實(shí)例


    
    

4、JS執(zhí)行機(jī)制

4.1、JS是單線程

  • JavaScript 語言的一大特點(diǎn)就是單線程,也就是說,同一個(gè)時(shí)間只能做一件事。這是因?yàn)?Javascript 這門腳本語言誕生的使命所致——JavaScript 是為處理頁面中用戶的交互,以及操作 DOM 而誕生的。比如我們對(duì)某個(gè) DOM 元素進(jìn)行添加和刪除操作,不能同時(shí)進(jìn)行。 應(yīng)該先進(jìn)行添加,之后再刪除。

  • 單線程就意味著,所有任務(wù)需要排隊(duì),前一個(gè)任務(wù)結(jié)束,才會(huì)執(zhí)行后一個(gè)任務(wù)。這樣所導(dǎo)致的問題是: 如果 JS 執(zhí)行的時(shí)間過長,這樣就會(huì)造成頁面的渲染不連貫,導(dǎo)致頁面渲染加載阻塞的感覺。

4.2、一個(gè)問題

以下代碼執(zhí)行的結(jié)果是什么?

console.log(1);setTimeout(function() {
    console.log(3);},1000);console.log(2);

那么以下代碼執(zhí)行的結(jié)果又是什么?

console.log(1);setTimeout(function() {
    console.log(3);},0);console.log(2);

4.3、同步和異步

  • 為了解決這個(gè)問題,利用多核 CPU 的計(jì)算能力,HTML5 提出 Web Worker 標(biāo)準(zhǔn),允許 JavaScript 腳本創(chuàng)建多個(gè)線程

  • 于是,JS 中出現(xiàn)了同步和異步。

  • 同步:

    • 前一個(gè)任務(wù)結(jié)束后再執(zhí)行后一個(gè)任務(wù)

  • 異步

    • 在做這件事的同時(shí),你還可以去處理其他事情

同步任務(wù)

  • 同步任務(wù)都在主線程上執(zhí)行,形成一個(gè)執(zhí)行棧

異步任務(wù)

  • JS中的異步是通過回調(diào)函數(shù)實(shí)現(xiàn)的

  • 異步任務(wù)有以下三種類型

    • 普通事件,如click,resize

    • 資源加載,如load,error

    • 定時(shí)器,包括setInterval,setTimeout

  • 異步任務(wù)相關(guān)回調(diào)函數(shù)添加到任務(wù)隊(duì)列

JavaScript的BOM技術(shù)怎么用

  1. 先執(zhí)行執(zhí)行棧中的同步任務(wù)

  2. 異步任務(wù)(回調(diào)函數(shù))放入任務(wù)隊(duì)列中

  3. 一旦執(zhí)行棧中的所有同步任務(wù)執(zhí)行完畢,系統(tǒng)就會(huì)按次序讀取任務(wù)隊(duì)列中的異步任務(wù),于是被讀取的異步任務(wù)結(jié)束等待狀態(tài),進(jìn)入執(zhí)行棧,開始執(zhí)行

JavaScript的BOM技術(shù)怎么用

此時(shí)再來看我們剛才的問題:

console.log(1);setTimeout(function() {
    console.log(3);},1000);console.log(2);
  • 執(zhí)行的結(jié)果和順序?yàn)?1、2、3

console.log(1);setTimeout(function() {
    console.log(3);},0);console.log(2);
  • 執(zhí)行的結(jié)果和順序?yàn)?1、2、3

// 3. 第三個(gè)問題console.log(1);document.onclick = function() {
    console.log('click');}console.log(2);setTimeout(function() {
    console.log(3)}, 3000)

JavaScript的BOM技術(shù)怎么用

同步任務(wù)放在執(zhí)行棧中執(zhí)行,異步任務(wù)由異步進(jìn)程處理放到任務(wù)隊(duì)列中,執(zhí)行棧中的任務(wù)執(zhí)行完畢會(huì)去任務(wù)隊(duì)列中查看是否有異步任務(wù)執(zhí)行,由于主線程不斷的重復(fù)獲得任務(wù)、執(zhí)行任務(wù)、再獲取任務(wù)、再執(zhí)行,所以這種機(jī)制被稱為事件循環(huán)( event loop)。

5、location對(duì)象

  • window 對(duì)象給我們提供了一個(gè) location屬性用于獲取或者設(shè)置窗體的url,并且可以解析url。因?yàn)檫@個(gè)屬性返回的是一個(gè)對(duì)象,所以我們將這個(gè)屬性也稱為 location 對(duì)象。

5.1、url

==統(tǒng)一資源定位符(uniform resouce locator)==是互聯(lián)網(wǎng)上標(biāo)準(zhǔn)資源的地址?;ヂ?lián)網(wǎng)上的每個(gè)文件都有一個(gè)唯一的 URL,它包含的信息指出文件的位置以及瀏覽器應(yīng)該怎么處理它。

url 的一般語法格式為:

protocol://host[:port]/path/[?query]#fragment

http://www.itcast.cn/index.html?name=andy&age=18#link
組成說明
protocol通信協(xié)議 常用的http,ftp,maito等
host主機(jī)(域名) www.itheima.com
port端口號(hào),可選
path路徑 由零或多個(gè)'/'符號(hào)隔開的字符串
query參數(shù) 以鍵值對(duì)的形式,通過&符號(hào)分隔開來
fragment片段 #后面內(nèi)容 常見于鏈接 錨點(diǎn)

5.2、location對(duì)象屬性

location對(duì)象屬性返回值
location.href獲取或者設(shè)置整個(gè)URL
location.host返回主機(jī)(域名)www.baidu.com
location.port返回端口號(hào),如果未寫返回空字符串
location.pathname返回路徑
location.search返回參數(shù)
location.hash返回片段 #后面內(nèi)容常見于鏈接 錨點(diǎn)

重點(diǎn)記?。?mark>hrefsearch

需求:5s之后跳轉(zhuǎn)頁面


    
    

    

5.3、location對(duì)象方法

location對(duì)象方法返回值
location.assign()跟href一樣,可以跳轉(zhuǎn)頁面(也稱為重定向頁面)
location.replace()替換當(dāng)前頁面,因?yàn)椴挥涗洑v史,所以不能后退頁面
location.reload()重新加載頁面,相當(dāng)于刷新按鈕或者 f5 ,如果參數(shù)為true 強(qiáng)制刷新 ctrl+f5

    
    

5.4、獲取URL參數(shù)

我們簡單寫一個(gè)登錄框,點(diǎn)擊登錄跳轉(zhuǎn)到 index.html


    
        用戶名: 
        
    

接下來我們寫 index.html


    

    

這樣我們就能獲取到路徑上的URL參數(shù)

6、navigator對(duì)象

  • navigator 對(duì)象包含有關(guān)瀏覽器的信息,它有很多屬性

  • 我們常用的是userAgent,該屬性可以返回由客戶機(jī)發(fā)送服務(wù)器user-agent頭部的值

下面前端代碼可以判斷用戶是用哪個(gè)終端打開頁面的,如果是用 PC 打開的,我們就跳轉(zhuǎn)到 PC 端的頁面,如果是用手機(jī)打開的,就跳轉(zhuǎn)到手機(jī)端頁面

if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
    window.location.href = "";     //手機(jī)
 } else {
    window.location.href = "";     //電腦
 }

7、history對(duì)象

  • window 對(duì)象給我們提供了一個(gè) history 對(duì)象,與瀏覽器歷史記錄進(jìn)行交互

  • 該對(duì)象包含用戶(在瀏覽器窗口中)訪問過的 URL。

history對(duì)象方法作用
back()可以后退功能
forward()前進(jìn)功能
go(參數(shù))前進(jìn)后退功能,參數(shù)如果是 1 前進(jìn)1個(gè)頁面 如果是 -1 后退1個(gè)頁面

    點(diǎn)擊我去往列表頁
    
    

感謝各位的閱讀,以上就是“JavaScript的BOM技術(shù)怎么用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)JavaScript的BOM技術(shù)怎么用這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


網(wǎng)頁名稱:JavaScript的BOM技術(shù)怎么用
文章轉(zhuǎn)載:http://weahome.cn/article/pcdjds.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部