摘要:的歷史可以追溯至年代后期微軟與的瀏覽器大戰(zhàn),雙方為了在與一決生死,于是大規(guī)模的賦予瀏覽器強(qiáng)大的功能。微軟在網(wǎng)頁技術(shù)上加入了不少專屬事物,既有以及微軟自家的格式等,使不少網(wǎng)頁使用非微軟平臺(tái)及瀏覽器無法正常顯示。
學(xué)習(xí)目標(biāo):
掌握API和Web API的概念
掌握常見的瀏覽器提供的API的調(diào)用方式
能通過API開發(fā)常見的頁面交互功能
能夠利用搜索引擎解決問題
API的概念
API(Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù),目的是提供應(yīng)用程序與開發(fā)人員基于某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。
任何開發(fā)語言都有自己的API
API的特征輸入和輸出(I/O)
API的使用方法(console.log())
Web API的概念瀏覽器提供的一套操作瀏覽器功能和頁面元素的API(BOM和DOM)
此處的Web API特指瀏覽器提供的API(一組方法),Web API在后面的課程中有其它含義
MDN-Web API
JavaScript的組成
定義了javascript的語法規(guī)范
JavaScript的核心,描述了語言的基本語法和數(shù)據(jù)類型,ECMAScript是一套標(biāo)準(zhǔn),定義了一種語言的標(biāo)準(zhǔn)與具體實(shí)現(xiàn)無關(guān)
一套操作瀏覽器功能的API
通過BOM可以操作瀏覽器窗口,比如:彈出框、控制瀏覽器跳轉(zhuǎn)、獲取分辨率等
一套操作頁面元素的API
DOM可以把HTML看做是文檔樹,通過DOM提供的API可以對(duì)樹上的節(jié)點(diǎn)進(jìn)行操作
BOM的概念
BOM(Browser Object Model) 是指瀏覽器對(duì)象模型,瀏覽器對(duì)象模型提供了獨(dú)立于內(nèi)容的、可以與瀏覽器窗口進(jìn)行互動(dòng)的對(duì)象結(jié)構(gòu)。BOM由多個(gè)對(duì)象組成,其中代表瀏覽器窗口的Window對(duì)象是BOM的頂層對(duì)象,其他對(duì)象都是該對(duì)象的子對(duì)象。
我們?cè)跒g覽器中的一些操作都可以使用BOM的方式進(jìn)行編程處理,
比如:刷新瀏覽器、后退、前進(jìn)、在瀏覽器中輸入U(xiǎn)RL等
window是瀏覽器的頂級(jí)對(duì)象,當(dāng)調(diào)用window下的屬性和方法時(shí),可以省略window
注意:window下一個(gè)特殊的屬性 window.name
alert()
prompt()
confirm()
頁面加載事件onload
window.onload = function () { // 當(dāng)頁面加載完成執(zhí)行 // 當(dāng)頁面完全加載所有內(nèi)容(包括圖像、腳本文件、CSS 文件等)執(zhí)行 }
onunload
window.onunload = function () { // 當(dāng)用戶退出頁面時(shí)執(zhí)行 }定時(shí)器
setTimeout()和clearTimeout()
在指定的毫秒數(shù)到達(dá)之后執(zhí)行指定的函數(shù),只執(zhí)行一次
// 創(chuàng)建一個(gè)定時(shí)器,1000毫秒后執(zhí)行,返回定時(shí)器的標(biāo)示 var timerId = setTimeout(function () { console.log("Hello World"); }, 1000); // 取消定時(shí)器的執(zhí)行 clearTimeout(timerId);setInterval()和clearInterval()
定時(shí)調(diào)用的函數(shù),可以按照給定的時(shí)間(單位毫秒)周期調(diào)用函數(shù)
// 創(chuàng)建一個(gè)定時(shí)器,每隔1秒調(diào)用一次 var timerId = setInterval(function () { var date = new Date(); console.log(date.toLocaleTimeString()); }, 1000); // 取消定時(shí)器的執(zhí)行 clearInterval(timerId);location對(duì)象
location對(duì)象是window對(duì)象下的一個(gè)屬性,時(shí)候的時(shí)候可以省略window對(duì)象
location可以獲取或者設(shè)置瀏覽器地址欄的URL
統(tǒng)一資源定位符 (Uniform Resource Locator, URL)
URL的組成
scheme://host:port/path?query#fragment
scheme:通信協(xié)議
常用的http,ftp,maito等
host:主機(jī)
服務(wù)器(計(jì)算機(jī))域名系統(tǒng) (DNS) 主機(jī)名或 IP 地址。
port:端口號(hào)
整數(shù),可選,省略時(shí)使用方案的默認(rèn)端口,如http的默認(rèn)端口為80。
path:路徑
由零或多個(gè)"/"符號(hào)隔開的字符串,一般用來表示主機(jī)上的一個(gè)目錄或文件地址。
query:查詢
可選,用于給動(dòng)態(tài)網(wǎng)頁傳遞參數(shù),可有多個(gè)參數(shù),用"&"符號(hào)隔開,每個(gè)參數(shù)的名和值用"="符號(hào)隔開。例如:name=zs
fragment:信息片斷
字符串,錨點(diǎn).
location有哪些成員?
使用chrome的控制臺(tái)查看
查MDN
MDN
成員
assign()/reload()/replace()
hash/host/hostname/search/href……
history對(duì)象
back()
forward()
go()
navigator對(duì)象
userAgent
通過userAgent可以判斷用戶瀏覽器的類型
platform
通過platform可以判斷瀏覽器所在的系統(tǒng)平臺(tái)類型.
文檔對(duì)象模型(Document Object Model,簡(jiǎn)稱DOM),是W3C組織推薦的處理可擴(kuò)展標(biāo)志語言的標(biāo)準(zhǔn)編程接口。在網(wǎng)頁上,組織頁面(或文檔)的對(duì)象被組織在一個(gè)樹形結(jié)構(gòu)中,用來表示文檔中對(duì)象的標(biāo)準(zhǔn)模型就稱為DOM。Document Object Model的歷史可以追溯至1990年代后期微軟與Netscape的“瀏覽器大戰(zhàn)”,雙方為了在JavaScript與JScript一決生死,于是大規(guī)模的賦予瀏覽器強(qiáng)大的功能。微軟在網(wǎng)頁技術(shù)上加入了不少專屬事物,既有VBScript、ActiveX、以及微軟自家的DHTML格式等,使不少網(wǎng)頁使用非微軟平臺(tái)及瀏覽器無法正常顯示。DOM即是當(dāng)時(shí)蘊(yùn)釀出來的杰作。
DOM又稱為文檔樹模型
文檔:一個(gè)網(wǎng)頁可以稱為文檔
節(jié)點(diǎn):網(wǎng)頁中的所有內(nèi)容都是節(jié)點(diǎn)(標(biāo)簽、屬性、文本、注釋等)
元素:網(wǎng)頁中的標(biāo)簽
屬性:標(biāo)簽的屬性
獲取元素
動(dòng)態(tài)創(chuàng)建元素
對(duì)元素進(jìn)行操作(設(shè)置其屬性或調(diào)用其方法)
事件(什么時(shí)機(jī)做相應(yīng)的操作)
var div = document.getElementById("main"); console.log(div); // 獲取到的數(shù)據(jù)類型 HTMLDivElement,對(duì)象都是有類型的 // HTMLDivElement <-- HTMLElement <-- Element <-- Node <-- EventTarget根據(jù)標(biāo)簽名獲取元素
var divs = document.getElementsByTagName("div"); for (var i = 0; i < divs.length; i++) { var div = divs[i]; console.log(div); }根據(jù)name獲取元素*
var inputs = document.getElementsByName("hobby"); for (var i = 0; i < inputs.length; i++) { var input = inputs[i]; console.log(input); }根據(jù)類名獲取元素
var mains = document.getElementsByClassName("main"); for (var i = 0; i < mains.length; i++) { var main = mains[i]; console.log(main); }根據(jù)選擇器獲取元素
var text = document.querySelector("#text"); console.log(text); var boxes = document.querySelectorAll(".box"); for (var i = 0; i < boxes.length; i++) { var box = boxes[i]; console.log(box); }
總結(jié)
掌握
getElementById() getElementsByTagName()
了解
getElementsByName() getElementsByClassName() querySelector() querySelectorAll()事件
事件:觸發(fā)-響應(yīng)機(jī)制
Event接口表示在DOM中發(fā)生的任何事件,一些是用戶生成的(例如鼠標(biāo)或鍵盤事件),而其他由API生成。
事件源:觸發(fā)(被)事件的元素
事件類型:事件的觸發(fā)方式(例如鼠標(biāo)點(diǎn)擊或鍵盤點(diǎn)擊)
事件處理程序:事件觸發(fā)后要執(zhí)行的代碼(函數(shù)形式)
事件的基本使用var box = document.getElementById("box"); box.onclick = function() { console.log("代碼會(huì)在box被點(diǎn)擊后執(zhí)行"); };
href、title、id、src、className
var link = document.getElementById("link"); console.log(link.href); console.log(link.title); var pic = document.getElementById("pic"); console.log(pic.src);
innerHTML和innerText
var box = document.getElementById("box"); box.innerHTML = "我是文本我會(huì)生成為標(biāo)簽
"; console.log(box.innerHTML); box.innerText = "我是文本我不會(huì)生成為標(biāo)簽
"; console.log(box.innerText);
HTML轉(zhuǎn)義符
" "
‘ "
& &
< < //less than 小于
> // greater than 大于空格 ?
? ?
value 用于大部分表單元素的內(nèi)容獲取(option除外)
type 可以獲取input標(biāo)簽的類型(輸入框或復(fù)選框等)
disabled 禁用屬性
checked 復(fù)選框選中屬性
selected 下拉菜單選中屬性
自定義屬性操作getAttribute() 獲取標(biāo)簽行內(nèi)屬性
setAttribute() 設(shè)置標(biāo)簽行內(nèi)屬性
removeAttribute() 移除標(biāo)簽行內(nèi)屬性
與element.屬性的區(qū)別: 上述三個(gè)方法用于獲取任意的行內(nèi)屬性。
樣式操作var box = document.getElementById("box"); box.style.width = "100px"; box.style.height = "100px"; box.style.backgroundColor = "red";類名操作
var box = document.getElementById("box"); box.className = "clearfix";
document.write()
document.write("新設(shè)置的內(nèi)容標(biāo)簽也可以生成
");
innerHTML
var box = document.getElementById("box"); box.innerHTML = "新內(nèi)容新標(biāo)簽
";
document.createElement()
var div = document.createElement("div"); document.body.appendChild(div);性能問題
innerHTML方法由于會(huì)對(duì)字符串進(jìn)行解析,需要避免在循環(huán)內(nèi)多次使用。
可以借助字符串或數(shù)組的方式進(jìn)行替換,再設(shè)置給innerHTML
優(yōu)化后與document.createElement性能相近
節(jié)點(diǎn)操作var body = document.body; var div = document.createElement("div"); body.appendChild(div); var firstEle = body.children[0]; body.insertBefore(div,firstEle); body.removeChild(firstEle); var text = document.createElement("p"); body.replaceChild(text, div);節(jié)點(diǎn)層級(jí)
重點(diǎn)講父子屬性,兄弟屬性畫圖講解
var box = document.getElementById("box"); console.log(box.parentNode); console.log(box.childNodes); console.log(box.children); console.log(box.nextSibling); console.log(box.previousSibling); console.log(box.firstChild); console.log(box.lastChild);
注意
childNodes和children的區(qū)別,childNodes獲取的是子節(jié)點(diǎn),children獲取的是子元素
nextSibling和previousSibling獲取的是節(jié)點(diǎn),獲取元素對(duì)應(yīng)的屬性是nextElementSibling和previousElementSibling獲取的是元素
nextElementSibling和previousElementSibling有兼容性問題,IE9以后才支持
總結(jié)
節(jié)點(diǎn)操作,方法
appendChild() insertBefore() removeChild() replaceChild()
節(jié)點(diǎn)層次,屬性
parentNode childNodes children nextSibling/previousSibling firstChild/lastChild
var box = document.getElementById("box"); box.onclick = function () { console.log("點(diǎn)擊后執(zhí)行"); }; box.onclick = null; box.addEventListener("click", eventCode, false); box.removeEventListener("click", eventCode, false); box.attachEvent("onclick", eventCode); box.detachEvent("onclick", eventCode); function eventCode() { console.log("點(diǎn)擊后執(zhí)行"); }事件的三個(gè)階段
捕獲階段
當(dāng)前目標(biāo)階段
冒泡階段
事件對(duì)象.eventPhase屬性可以查看事件觸發(fā)時(shí)所處的階段
event.type 獲取事件類型
clientX/clientY 所有瀏覽器都支持,窗口位置
pageX/pageY IE8以前不支持,頁面位置
event.target || event.srcElement 用于獲取觸發(fā)事件的元素
event.preventDefault() 取消默認(rèn)行為
阻止事件傳播的方式標(biāo)準(zhǔn)方式 event.stopPropagation();
IE低版本 event.cancelBubble = true; 標(biāo)準(zhǔn)中已廢棄
onmouseup 鼠標(biāo)按鍵放開時(shí)觸發(fā)
onmousedown 鼠標(biāo)按鍵按下觸發(fā)
onmousemove 鼠標(biāo)移動(dòng)觸發(fā)
onkeyup 鍵盤按鍵按下觸發(fā)
onkeydown 鍵盤按鍵抬起觸發(fā)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/30007.html
摘要:的歷史可以追溯至年代后期微軟與的瀏覽器大戰(zhàn),雙方為了在與一決生死,于是大規(guī)模的賦予瀏覽器強(qiáng)大的功能。微軟在網(wǎng)頁技術(shù)上加入了不少專屬事物,既有以及微軟自家的格式等,使不少網(wǎng)頁使用非微軟平臺(tái)及瀏覽器無法正常顯示。 學(xué)習(xí)目標(biāo): 掌握API和Web API的概念 掌握常見的瀏覽器提供的API的調(diào)用方式 能通過API開發(fā)常見的頁面交互功能 能夠利用搜索引擎解決問題 Web API API的...
摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識(shí),其實(shí)都是來自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。 開篇 前端開發(fā)是一個(gè)非常特殊的行業(yè),它的歷史實(shí)際上不是很長,但是知識(shí)之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研...
閱讀 2894·2021-11-24 09:38
閱讀 3518·2021-11-23 09:51
閱讀 987·2021-09-09 11:52
閱讀 4039·2021-08-11 11:18
閱讀 1115·2019-08-30 14:05
閱讀 3235·2019-08-30 11:23
閱讀 1773·2019-08-29 17:02
閱讀 1132·2019-08-26 13:49