国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

03 Web全棧 瀏覽器內(nèi)置對象/事件/ajax

這篇具有很好參考價值的文章主要介紹了03 Web全棧 瀏覽器內(nèi)置對象/事件/ajax。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

瀏覽器是一個JS的運(yùn)行時環(huán)境,它基于JS解析器的同時,增加了許多環(huán)境相關(guān)的內(nèi)容,用一張圖表示各個運(yùn)行環(huán)境和JS解析器的關(guān)系如下:

03 Web全棧 瀏覽器內(nèi)置對象/事件/ajax
我們把常見的,能夠用JS這門語言控制的內(nèi)容稱為一個JS的運(yùn)行環(huán)境,常見的運(yùn)行環(huán)境又Nodejs,瀏覽器,小程序,一些物聯(lián)網(wǎng)設(shè)備等等,所有運(yùn)行環(huán)境都必須有一個JS的解釋器,在解釋器層面符合ECMAScript規(guī)范,定義了JS本身語言層面的東西如關(guān)鍵字,語法等等。

在每個環(huán)境中,也會基于JS開發(fā)一些當(dāng)前環(huán)境的特性,例如Nodejs中的global對象,process對象,瀏覽器環(huán)境中的window對象,document對象等等,這些屬性屬于運(yùn)行環(huán)境在JS基礎(chǔ)上的內(nèi)容。

這也就解釋了為什么在Nodejs和瀏覽器中都能使用數(shù)組、函數(shù),但是只能在nodejs中使用require加載模塊,而不能在瀏覽器端使用,因為require是nodejs特有的運(yùn)行環(huán)境中的內(nèi)容。

內(nèi)置對象屬性

window
window是在瀏覽器中代表全局作用域,所有在全局作用域下聲明的變量和內(nèi)容最終都會變成window對象下的屬性。例:

var num = 123
console.log(window.num) // 123

訪問未聲明的變量時,如果直接訪問則會報錯,而如果使用window進(jìn)行訪問,就像通過對象訪問那樣,會返回undefined

var name = oldName // 報錯
var name2 = window.oldName // undefined

setTimeout 和 setInterval
setTimeout 和 setInterval他們都可以接受兩個參數(shù),第一個參數(shù)是回調(diào)函數(shù),第二個參數(shù)是等待執(zhí)行的時間,在等待時間結(jié)束之后,就會將回調(diào)函數(shù)放到event loop中進(jìn)行執(zhí)行,他們都返回一個id,傳入clearTimeout和clearInterval都能夠清除這次的定時操作。

var id = setTimeout(function () {
	console.log("hello")
}, 1000)
clearTimeout(id)

可視化工具網(wǎng)站: http://latentflip.com/loupe

alert,confirm,prompt 等交互api
這里使用了這類API后,會導(dǎo)致頁面JS停止執(zhí)行

Location
屬性:

  • hash:返回URL的錨部分
  • host:返回一個URL的主機(jī)名和端口
  • hostname:返回一個URL的主機(jī)名
  • href:當(dāng)前url
  • pathname:返回URL的路徑名
  • port:返回URL服務(wù)器使用的端口號
  • protocol:返回一個URL的協(xié)議
  • search:返回URL的查詢部分

方法:

  • reload:重新載入當(dāng)前頁面
  • replace:用新的頁面替換當(dāng)前頁面

Document

方法:選擇器
getElementById、getElementByClassName等API

方法:創(chuàng)建元素
createElement

屬性:

  1. title:可以設(shè)置或返回當(dāng)前頁面標(biāo)題
  2. domain:展示當(dāng)前網(wǎng)站的域名
  3. url:當(dāng)前網(wǎng)站的鏈接
  4. anchors:返回所有錨點(diǎn),帶name屬性的a標(biāo)簽
  5. forms:返回所有form標(biāo)簽集合
  6. images:返回所有img標(biāo)簽集合
  7. links:返回所有帶href屬性的a標(biāo)簽

Element
Element元素的nodeType均為1,大多數(shù)變遷都是一個Element實例

屬性:
tagName:返回當(dāng)前元素的標(biāo)簽名

方法:
setAttribute:獲取當(dāng)前節(jié)點(diǎn)屬性的結(jié)果
setAttrbute:設(shè)置當(dāng)前節(jié)點(diǎn)屬性

Text類型
Text類型包括所有村文本內(nèi)容,它不支持子節(jié)點(diǎn),同時他的nodeType為3

History
History對象包含用戶訪問過的URL,在HTML5中,history還與客戶端路由息息相關(guān)

屬性:
length:返回歷史歷史列表中的網(wǎng)址數(shù)

方法:
back:加載history列表中的前一個URL
forward:加載history列表中的下一個URL
go:加載history列表中的某個具體頁面
pushState:替換地址欄地址,并且加入history列表,但并不會刷新頁面
replaceState:替換地址欄地址,替換當(dāng)前頁面在history列表中的記錄,并不刷新頁面

總結(jié)

  • 全局定義的變量均可通過window來進(jìn)行訪問,使用setInterval需要注意,有可能并不是以相同間隔執(zhí)行,使用alert等api需要注意js代碼可能會被阻塞
  • location對象需要明確對于URL來說每個類型代表的具體值是什么
  • document對象主要銜接js和DOM元素,需要注意這里很多結(jié)果是array-like類數(shù)組元素,以及使用createFragment代碼片斷等優(yōu)化,來防止瀏覽器多次重排造成的性能問題
  • Element和Text是兩個我們常見且易考的DOM對象,熟悉常見的方法和debug方式
  • history因為和路由息息相關(guān),我們需要熟悉新增的pushState和replaceState方法

事件

定義事件
我們可以通過多種方式對DOM元素定義一個事件

<p>點(diǎn)擊后彈出alert</p>

第一種方式直接在dom元素中添加,這種方式不推薦

<p onclick="showAlert()">點(diǎn)擊后彈出alert</p>
<script>
	function showAlert() {
		alert('hello')
	}
</script>

第二種方式,純JS解決,獲取dom元素之后通過設(shè)置其onclick屬性

document.getElementByTagName('p')[0].onclick = function () {
	alert('hello')
}
// 取消事件只需要設(shè)置onclick屬性為null即可
document.getElementByTagName('p')[0].onclick = null

優(yōu)點(diǎn):純JS實現(xiàn),視圖與邏輯解耦
缺點(diǎn):一個dom元素僅能設(shè)置一個onclick事件

第三種方式,純JS解決,DOM2級規(guī)范實現(xiàn)新的API,addEventListener和removeEventListener兩個API

var onClickFunc = function () {
	alert('hello')
}
document.getElementByTagName('p')[0].addEventListener('click', onClickFunc)
// 取消事件
document.getElementByTagName('p')[0].removeEventListener('click', onClickFunc)

優(yōu)點(diǎn):純JS實現(xiàn),視圖與邏輯解耦,可以設(shè)置多個回調(diào)函數(shù)
缺點(diǎn):removeEventListener刪除事件函數(shù)必須與設(shè)置時保持相同的函數(shù)引用,所以設(shè)置事件盡量不要用匿名函數(shù)

事件捕獲及冒泡
DOM是一個嵌套性的樹形樹狀結(jié)構(gòu),在瀏覽器中的表現(xiàn)就是疊加在一起的,所以在瀏覽器中點(diǎn)擊一個區(qū)域,在DOM結(jié)構(gòu)中會一次遍歷多個dom,自頂向下稱為【事件捕獲】自下而上稱為【事件冒泡】

DOM2事件規(guī)范規(guī)定,一個標(biāo)準(zhǔn)事件流氛圍三個階段,首先手自上而下的【事件捕獲】狀態(tài),然后是真正觸發(fā)事件的元素,最后這個元素再回到頂部的事件冒泡

DOM2級事件規(guī)范新增的事件定義函數(shù)addEventListener就可以通過第三個參數(shù)來指定究竟是在捕獲階段觸發(fā)還是在冒泡階段觸發(fā),第三個參數(shù)為true則是在捕獲階段觸發(fā),第三個參數(shù)為false,則在冒泡階段觸發(fā)

事件對象
觸發(fā)事件之后,瀏覽器會傳入一個事件對象進(jìn)入事件回調(diào)函數(shù)本身

document.getElementsByTagName('p')[0].onclick = function (event) {
	console.log(event)
}
document.getElementsByTagName('p')[0].addEventListener('click', function (event) {
	consolel.log(event)
})

event 對象屬性如下:

  • bubbles:表明事件是否冒泡
  • cancelable:表示是否可以取消事件的默認(rèn)行為
  • currentTarget:事件當(dāng)前正在處理的元素
  • defaultPrevented: 為true則代表已經(jīng)調(diào)用了preventDefault函數(shù)
  • detail:事件細(xì)節(jié)
  • eventPhase:事件所處階段,1代表捕獲,2代表在事件目標(biāo),3代表冒泡
  • type:事件類型(click等)

event對象方法如下:

  • preventDefault:取消事件的默認(rèn)行為
  • stopImmediatePropagation:取消事件的進(jìn)一步捕獲或冒泡,同時組織事件處理程序調(diào)用
  • stopPropagation:取消事件進(jìn)一步捕獲或冒泡

事件委托

// html
<ul id="ul">
	<li>1</li>
	<li>2</li>
	<li>3</li>
	<li>4</li>
	<li>5</li>
</ul>

// js
document.getElementById("ul").onclick = function (event) {
	var target = event.target
	if (target.nodeName.toLowerCase === 'li') {
		alert(target.innerHTML)
	}
}

AJAX

2005年開始,ajax作為一項新興的交互開始影響web的發(fā)展,ajax的核心是XMLHttpRequest對象。

var xhr = new XMLHttpRequest()
// xhr.open接受三個參數(shù),要發(fā)送的請求類型get post 請求的url、是否異步發(fā)送的布爾值
xhr.open('get', '/url', true)
// 調(diào)用send函數(shù)發(fā)送這個請求,參數(shù)為攜帶的參數(shù)
xhr.send(null)

// 通過onreadystatechange事件監(jiān)聽當(dāng)前xhr實例的階段,通過判斷xhr.readyState的階段,來判斷當(dāng)前請求的狀態(tài)
// 0:未調(diào)用open方法
// 1:已調(diào)用open方法 未調(diào)用send方法
// 2:已調(diào)用send方法但尚未收到返回
// 3:已收到部分響應(yīng)數(shù)據(jù)
// 4:已收到所有響應(yīng)數(shù)據(jù)
xhr.onreadystatechange = function () {
	if (xhr.readyState === 4) {
		console.log(xhr.responseText)
	}
}

ES6 之后的fetch API
在ES6之后,瀏覽器端新增了一個fetch api 有以下幾個特點(diǎn)文章來源地址http://www.zghlxwxcb.cn/news/detail-503982.html

  • 返回一個promise結(jié)果
  • 默認(rèn)不帶cookie,需要使用配置credentials: ‘include’
  • 當(dāng)網(wǎng)絡(luò)故障或請求被阻止時,才會標(biāo)記為reject,否則即時返回狀態(tài)碼是500,也會resolve這個promise
fetch('/ajax.json').then(function (response) {
	response.text() // 返回字符串
	response.json() // 返回json
	response.blob() // 一般指返回文件對象
	response.arrayBuffer() // 返回一個二進(jìn)制文件
	response.formData() // 返回表單格式內(nèi)容
})

到了這里,關(guān)于03 Web全棧 瀏覽器內(nèi)置對象/事件/ajax的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信小程序中打開內(nèi)置瀏覽器的方法

    因為微信小程序本身是不推薦引流到外部的,所以正規(guī)的方法其實都是被禁止掉的。 1.wx.openUrl可直接打開內(nèi)置瀏覽器頁面 (2021年時可以使用,現(xiàn)在已被禁用) 2.通過原生按鈕跳轉(zhuǎn)到小程序客服,客服發(fā)送鏈接卡片,通過卡片的鏈接進(jìn)入。 3.跳轉(zhuǎn)到公眾號文章,文章底部的查

    2024年02月11日
    瀏覽(31)
  • 微信小程序跳轉(zhuǎn)微信內(nèi)置瀏覽器

    微信小程序跳轉(zhuǎn)微信內(nèi)置瀏覽器

    最近遇到一個需求,需要微信小程序跳轉(zhuǎn)到微信內(nèi)置瀏覽器,但是官網(wǎng)并沒有給出相關(guān)文檔。查閱了大量資料,發(fā)現(xiàn)有兩種實現(xiàn)方式。 1、通過微信公眾號文章實現(xiàn) 小程序可以使用web-view打開關(guān)聯(lián)的公眾號文章,公眾號文章可以在閱讀全文放任一鏈接,小程序打開此文章后點(diǎn)

    2023年04月11日
    瀏覽(81)
  • UE5內(nèi)置瀏覽器插件WebUI簡易使用筆記

    UE5內(nèi)置瀏覽器插件WebUI簡易使用筆記

    之前的項目中為了提高效率,避免使用UE功能不完善的UMG系統(tǒng),使用了WebUI插件,在UI中內(nèi)嵌瀏覽器來展示網(wǎng)頁。用Vue框架配合插件制作網(wǎng)頁還是比UMG要快很多的,畢竟UE的UI制作插件比較少。 首先在UMG中創(chuàng)建一個新UI,拉一個新的面板,然后在里面加一個WebInterface組件。 之后

    2024年02月04日
    瀏覽(21)
  • 瀏覽器事件循環(huán)(事件輪詢)

    瀏覽器事件循環(huán)(Browser Event Loop)是瀏覽器用于處理用戶輸入、網(wǎng)絡(luò)請求、渲染和其他異步事件的機(jī)制。這個循環(huán)確保了 JavaScript 代碼的執(zhí)行是非阻塞的,允許瀏覽器同時處理多個任務(wù),從而提高用戶體驗。以下是瀏覽器事件循環(huán)的詳細(xì)說明: 調(diào)用棧: 當(dāng)一個 JavaScript 腳本

    2024年01月19日
    瀏覽(40)
  • ES文件瀏覽器 如何提取盒子已安裝(內(nèi)置)軟件APK 教程

    ES文件瀏覽器 如何提取盒子已安裝(內(nèi)置)軟件APK 教程

    ES文件瀏覽器( ES File Explorer)是一款功能強(qiáng)大免費(fèi)的本地和網(wǎng)絡(luò)文件管理器。 主要功能:文件管理:多種視圖列表和排序方式,查看并打開各類文件,在本地SD卡、局域網(wǎng)、OTG設(shè)備之間任意傳輸文件。多選、復(fù)制、粘帖、剪貼板、查看屬性、解壓、重命名、置頂?shù)龋?之前看到很

    2024年02月02日
    瀏覽(20)
  • 事件類型(鼠標(biāo)、鍵盤、瀏覽器)

    1、onmouseover鼠標(biāo)移入事件 在鼠標(biāo)指針移動到元素上時觸發(fā) 2、onmouseout 鼠標(biāo)移出事件 在鼠標(biāo)指針移出元素后觸發(fā) 3、onmouseenter鼠標(biāo)進(jìn)入事件 在鼠標(biāo)指針進(jìn)入到元素上時觸發(fā) 4、onmouseleave 鼠標(biāo)離開事件 在鼠標(biāo)指針離開元素后觸發(fā) 5、onfocus獲取焦點(diǎn)事件 在鼠標(biāo)光標(biāo)獲取輸入框焦

    2024年02月20日
    瀏覽(19)
  • 在?聊聊瀏覽器事件循環(huán)機(jī)制

    在?聊聊瀏覽器事件循環(huán)機(jī)制

    目錄 前言? 同步/異步編程模型 同步 異步 JS異步模型 調(diào)用棧 任務(wù)隊列 宏任務(wù)隊列 微任務(wù)隊列 微任務(wù)API 事件循環(huán) 隊列優(yōu)先級 混合隊列 事件循環(huán)實現(xiàn) 總結(jié) 參考文章 Event-Loop可視化工具 JS是單線程語言,在某個時間段只能執(zhí)行一段代碼。這種單線程模型的好處是不會出現(xiàn)多

    2024年02月10日
    瀏覽(30)
  • Selenium:瀏覽器及鼠標(biāo)、鍵盤事件

    Selenium:瀏覽器及鼠標(biāo)、鍵盤事件

    目錄 一、控制瀏覽器 二、鼠標(biāo)事件 三、鍵盤事件 一、控制瀏覽器 webdriver主要提供操作頁面上各種元素的方法,但它也提供操作瀏覽器的一些方法,例如控制瀏覽器大小、前進(jìn)和后退等。 1、控制瀏覽器窗口大小 2、全屏顯示 webdriver提供了maximize_window()方法使打開的瀏覽器全

    2024年02月02日
    瀏覽(23)
  • 瀏覽器事件循環(huán)Event Loop

    瀏覽器事件循環(huán)Event Loop

    引言: 事件循環(huán)不是瀏覽器獨(dú)有的,從字面上看,“循環(huán)”可以簡單地認(rèn)為就是重復(fù),比如for循環(huán),就是重復(fù)地執(zhí)行for循環(huán)體中的語句,所以事件循環(huán),可以理解為重復(fù)地處理事件,那么下一個問題是,處理的是什么事件,事件的相關(guān)信息從哪里獲取。 因為我沒有用nodejs做

    2024年02月05日
    瀏覽(21)
  • 曲鳥全棧UI自動化教學(xué)(四):Selenium工作原理及Webdriver對瀏覽器的配置和操作

    曲鳥全棧UI自動化教學(xué)(四):Selenium工作原理及Webdriver對瀏覽器的配置和操作

    上篇文章我們學(xué)習(xí)了Selenium頁面操作原理及如何高效的進(jìn)行元素定位 那Selenium的工作原理又是什么?是如何驅(qū)動瀏覽器的呢?這篇文章為你講解Selenium工作原理及Webdriver對瀏覽器的配置和操作。 Python測試交流群:8140 78962 Selenium進(jìn)行自動化測試主要依賴三項: 測試腳本(你寫的代

    2024年02月16日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包