05-JavaScript-Web-API


學(xué)習(xí)目標(biāo):

  • 掌握API和Web API的概念
  • 掌握常見的瀏覽器提供的API的調(diào)用方式
  • 能通過API開發(fā)常見的頁面交互功能
  • 能夠利用搜索引擎解決問題

Javascript Web API

ECMAScript - JavaScript的核心

定義了javascript的語法規(guī)范

JavaScript的核心锐涯,描述了語言的基本語法和數(shù)據(jù)類型蕴茴,ECMAScript是一套標(biāo)準(zhǔn)寂纪,定義了一種語言的標(biāo)準(zhǔn)與具體實(shí)現(xiàn)無關(guān)

BOM - 瀏覽器對象模型

一套操作瀏覽器功能的API

通過BOM可以操作瀏覽器窗口,比如:彈出框、控制瀏覽器跳轉(zhuǎn)、獲取分辨率等

DOM - 文檔對象模型

一套操作頁面元素的API

DOM可以把HTML看做是文檔樹揍庄,通過DOM提供的API可以對樹上的節(jié)點(diǎn)進(jìn)行操作

DOM

DOM的概念

文檔對象模型(Document Object Model,簡稱DOM)久窟,是W3C組織推薦的處理可擴(kuò)展標(biāo)志語言的標(biāo)準(zhǔn)編程接口秩冈。在網(wǎng)頁上,組織頁面(或文檔)的對象被組織在一個樹形結(jié)構(gòu)中斥扛,用來表示文檔中對象的標(biāo)準(zhǔn)模型就稱為DOM入问。Document Object Model的歷史可以追溯至1990年代后期微軟與Netscape的“瀏覽器大戰(zhàn)”,雙方為了在JavaScriptJScript一決生死稀颁,于是大規(guī)模的賦予瀏覽器強(qiáng)大的功能芬失。微軟在網(wǎng)頁技術(shù)上加入了不少專屬事物,既有VBScript匾灶、ActiveX棱烂、以及微軟自家的DHTML格式等,使不少網(wǎng)頁使用非微軟平臺及瀏覽器無法正常顯示阶女。DOM即是當(dāng)時蘊(yùn)釀出來的杰作垢啼。

DOM又稱為文檔樹模型

  • 文檔:一個網(wǎng)頁可以稱為文檔
  • 節(jié)點(diǎn):網(wǎng)頁中的所有內(nèi)容都是節(jié)點(diǎn)(標(biāo)簽、屬性张肾、文本芭析、注釋等)
  • 元素:網(wǎng)頁中的標(biāo)簽
  • 屬性:標(biāo)簽的屬性

DOM經(jīng)常進(jìn)行的操作

  • 獲取元素
  • 動態(tài)創(chuàng)建元素
  • 對元素進(jìn)行操作(設(shè)置其屬性或調(diào)用其方法)
  • 事件(什么時機(jī)做相應(yīng)的操作)

獲取頁面元素

案例

1.點(diǎn)擊按鈕彈出對話框
2.點(diǎn)擊按鈕修改超鏈接的地址和熱點(diǎn)文字
3.點(diǎn)擊(每個)圖片彈出對話框
4.點(diǎn)擊圖片設(shè)置自身寬和高
5.點(diǎn)擊按鈕修改每個圖片的title屬性
6.點(diǎn)擊按鈕顯示哈哈(排他功能)
7.點(diǎn)擊按鈕顯示和隱藏div
8.顯示和隱藏二維碼
9.點(diǎn)擊按鈕修改所有p標(biāo)簽內(nèi)容
10.點(diǎn)擊按鈕修改所有文本框內(nèi)容
11.點(diǎn)擊按鈕切換圖片
12.點(diǎn)擊超鏈接停止跳轉(zhuǎn)頁面
13.點(diǎn)擊小圖顯示大圖
14.美女相冊
15點(diǎn)擊按鈕選中性別和興趣

為什么要獲取頁面元素

例如:我們想要操作頁面上的某部分(顯示/隱藏,動畫)吞瞪,需要先獲取到該部分對應(yīng)的元素馁启,才進(jìn)行后續(xù)操作

根據(jù)id獲取元素

var div = document.getElementById('main');
console.log(div);

注意:由于id名具有唯一性,部分瀏覽器支持直接使用id名訪問元素芍秆,但不是標(biāo)準(zhǔn)方式惯疙,不推薦使用。

根據(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');

根據(jù)類名獲取元素

var mains = document.getElementsByClassName('main');

根據(jù)選擇器獲取元素

var text = document.querySelector('#text');
  • 總結(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('代碼會在box被點(diǎn)擊后執(zhí)行');  
};

案例

  • 點(diǎn)擊按鈕彈出提示框
  • 點(diǎn)擊按鈕修改元素的樣式

屬性操作

非表單元素的屬性

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);

案例:

? 點(diǎn)擊按鈕诉位,切換img標(biāo)簽里的圖片

? 點(diǎn)擊按鈕顯示隱藏div

  • innerHTML和innerText
var box = document.getElementById('box');
box.innerHTML = '我是文本<p>我會生成為標(biāo)簽</p>';
console.log(box.innerHTML);
box.innerText = '我是文本<p>我不會生成為標(biāo)簽</p>';
console.log(box.innerText);
  • HTML轉(zhuǎn)義符
<       &lt;    //less than  小于
>       &gt;   // greater than  大于
空格     &nbsp;
  • innerHTML和innerText的區(qū)別

  • innerText的兼容性處理

表單元素屬性

  • value 用于大部分表單元素的內(nèi)容獲取(option除外)
  • type 可以獲取input標(biāo)簽的類型(輸入框或復(fù)選框等)
  • disabled 禁用屬性
  • checked 復(fù)選框選中屬性
  • selected 下拉菜單選中屬性

案例

  • 給文本框賦值,獲取文本框的值
  • 點(diǎn)擊按鈕禁用文本框
  • 搜索文本框
  • 檢測用戶名是否是3-6位菜枷,密碼是否是6-8位苍糠,如果不滿足要求高亮顯示文本框
  • 設(shè)置下拉框中的選中項
  • 全選反選

自定義屬性操作

  • getAttribute() 獲取標(biāo)簽行內(nèi)屬性
  • setAttribute() 設(shè)置標(biāo)簽行內(nèi)屬性
  • removeAttribute() 移除標(biāo)簽行內(nèi)屬性
  • 與element.屬性的區(qū)別: 上述三個方法用于獲取任意的行內(nèi)屬性。

樣式操作

  • 使用style方式設(shè)置的樣式顯示在標(biāo)簽行內(nèi)
var box = document.getElementById('box');
box.style.width = '100px';
box.style.height = '100px';
box.style.backgroundColor = 'red';
  • 注意

    通過樣式屬性設(shè)置寬高啤誊、位置的屬性類型是字符串岳瞭,需要加上px

類名操作

  • 修改標(biāo)簽的className屬性相當(dāng)于直接修改標(biāo)簽的類名
var box = document.getElementById('box');
box.className = 'clearfix';

案例

  • 開關(guān)燈
  • 點(diǎn)擊按鈕變色
  • 圖片切換二維碼案例
  • 當(dāng)前輸入的文本框高亮顯示
  • 點(diǎn)擊按鈕改變div的大小和位置
  • 列表隔行變色拥娄、高亮顯示
  • tab選項卡切換

創(chuàng)建元素的三種方式

document.write()

document.write('新設(shè)置的內(nèi)容<p>標(biāo)簽也可以生成</p>');

innerHTML

var box = document.getElementById('box');
box.innerHTML = '新內(nèi)容<p>新標(biāo)簽</p>';

document.createElement()

var div = document.createElement('div');
document.body.appendChild(div);

案例

  • 動態(tài)創(chuàng)建列表,高亮顯示
  • 根據(jù)數(shù)據(jù)動態(tài)創(chuàng)建表格
  • 模擬百度搜索文本框

節(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)層級

重點(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);
  • 總結(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í)行');
}

事件的三個階段

  1. 捕獲階段

  2. 當(dāng)前目標(biāo)階段

  3. 冒泡階段

    事件對象.eventPhase屬性可以查看事件觸發(fā)時所處的階段

事件對象的屬性和方法

  • event.type 獲取事件類型
  • clientX/clientY 所有瀏覽器都支持乏矾,窗口位置
  • pageX/pageY IE8以前不支持,頁面位置
  • event.target || event.srcElement 用于獲取觸發(fā)事件的元素
  • event.preventDefault() 取消默認(rèn)行為

案例

  • 跟著鼠標(biāo)飛的天使
  • 鼠標(biāo)點(diǎn)哪圖片飛到哪里
  • 獲取鼠標(biāo)在div內(nèi)的坐標(biāo)

阻止事件傳播的方式

  • 標(biāo)準(zhǔn)方式 event.stopPropagation();
  • IE低版本 event.cancelBubble = true; 標(biāo)準(zhǔn)中已廢棄

常用的鼠標(biāo)和鍵盤事件

  • onmouseup 鼠標(biāo)按鍵放開時觸發(fā)
  • onmousedown 鼠標(biāo)按鍵按下觸發(fā)
  • onmousemove 鼠標(biāo)移動觸發(fā)
  • onkeyup 鍵盤按鍵按下觸發(fā)
  • onkeydown 鍵盤按鍵抬起觸發(fā)

BOM

BOM的概念

BOM(Browser Object Model) 是指瀏覽器對象模型迁杨,瀏覽器對象模型提供了獨(dú)立于內(nèi)容的钻心、可以與瀏覽器窗口進(jìn)行互動的對象結(jié)構(gòu)。BOM由多個對象組成铅协,其中代表瀏覽器窗口的Window對象是BOM的頂層對象捷沸,其他對象都是該對象的子對象。

我們在瀏覽器中的一些操作都可以使用BOM的方式進(jìn)行編程處理狐史,

比如:刷新瀏覽器痒给、后退、前進(jìn)骏全、在瀏覽器中輸入URL等

BOM的頂級對象window

window是瀏覽器的頂級對象苍柏,當(dāng)調(diào)用window下的屬性和方法時,可以省略window
注意:window下一個特殊的屬性 window.name

對話框

  • alert()
  • prompt()
  • confirm()

頁面加載事件

  • onload
window.onload = function () {
  // 當(dāng)頁面加載完成執(zhí)行
  // 當(dāng)頁面完全加載所有內(nèi)容(包括圖像姜贡、腳本文件试吁、CSS 文件等)執(zhí)行
}
  • onunload
window.onunload = function () {
  // 當(dāng)用戶退出頁面時執(zhí)行
}

定時器

setTimeout()和clearTimeout()

在指定的毫秒數(shù)到達(dá)之后執(zhí)行指定的函數(shù),只執(zhí)行一次

// 創(chuàng)建一個定時器楼咳,1000毫秒后執(zhí)行熄捍,返回定時器的標(biāo)示
var timerId = setTimeout(function () {
  console.log('Hello World');
}, 1000);

// 取消定時器的執(zhí)行
clearTimeout(timerId);

setInterval()和clearInterval()

定時調(diào)用的函數(shù),可以按照給定的時間(單位毫秒)周期調(diào)用函數(shù)

// 創(chuàng)建一個定時器母怜,每隔1秒調(diào)用一次
var timerId = setInterval(function () {
  var date = new Date();
  console.log(date.toLocaleTimeString());
}, 1000);

// 取消定時器的執(zhí)行
clearInterval(timerId);

location對象

location對象是window對象下的一個屬性余耽,時候的時候可以省略window對象

location可以獲取或者設(shè)置瀏覽器地址欄的URL

URL

  • URL的組成
scheme://host:port/path?query#fragment
scheme:通信協(xié)議
    常用的http,ftp,maito等
host:主機(jī)
    服務(wù)器(計算機(jī))域名系統(tǒng) (DNS) 主機(jī)名或 IP 地址。
port:端口號
    整數(shù)苹熏,可選碟贾,省略時使用方案的默認(rèn)端口,如http的默認(rèn)端口為80轨域。
path:路徑
    由零或多個'/'符號隔開的字符串缕陕,一般用來表示主機(jī)上的一個目錄或文件地址。
query:查詢
    可選疙挺,用于給動態(tài)網(wǎng)頁傳遞參數(shù)扛邑,可有多個參數(shù),用'&'符號隔開铐然,每個參數(shù)的名和值用'='符號隔開蔬崩。例如:name=zs
fragment:信息片斷
    字符串恶座,錨點(diǎn).

location有哪些成員?

  • 使用chrome的控制臺查看

  • 成員

    • assign()/reload()/replace()
    • hash/host/hostname/search/href……

history對象

  • back()
  • forward()
  • go()

navigator對象

  • userAgent

通過userAgent可以判斷用戶瀏覽器的類型

  • platform

通過platform可以判斷瀏覽器所在的系統(tǒng)平臺類型.

特效

偏移量

  • offsetParent用于獲取定位的父級元素
  • offsetParent和parentNode的區(qū)別
var box = document.getElementById('box');
console.log(box.offsetParent);
console.log(box.offsetLeft);
console.log(box.offsetTop);
console.log(box.offsetWidth);
console.log(box.offsetHeight);

可視區(qū)大小

var box = document.getElementById('box');
console.log(box.clientLeft);
console.log(box.clientTop);
console.log(box.clientWidth);
console.log(box.clientHeight);

滾動偏移

var box = document.getElementById('box');
console.log(box.scrollLeft)
console.log(box.scrollTop)
console.log(box.scrollWidth)
console.log(box.scrollHeight)

案例

  • 勻速動畫函數(shù)
  • 變速動畫函數(shù)
  • 回到頂部
  • 無縫輪播圖
  • 模擬滾動條
  • 拖拽案例
  • 放大鏡案例
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沥阳,一起剝皮案震驚了整個濱河市跨琳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌桐罕,老刑警劉巖脉让,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異功炮,居然都是意外死亡溅潜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門薪伏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滚澜,“玉大人,你說我怎么就攤上這事嫁怀∩杈瑁” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵塘淑,是天一觀的道長萝招。 經(jīng)常有香客問我,道長存捺,這世上最難降的妖魔是什么即寒? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮召噩,結(jié)果婚禮上母赵,老公的妹妹穿的比我還像新娘。我一直安慰自己具滴,他們只是感情好凹嘲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著构韵,像睡著了一般周蹭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疲恢,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天凶朗,我揣著相機(jī)與錄音,去河邊找鬼显拳。 笑死棚愤,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宛畦,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼瘸洛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了次和?” 一聲冷哼從身側(cè)響起反肋,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎踏施,沒想到半個月后石蔗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡畅形,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年养距,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片束亏。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡铃在,死狀恐怖阵具,靈堂內(nèi)的尸體忽然破棺而出碍遍,到底是詐尸還是另有隱情,我是刑警寧澤阳液,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布怕敬,位于F島的核電站,受9級特大地震影響帘皿,放射性物質(zhì)發(fā)生泄漏东跪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一鹰溜、第九天 我趴在偏房一處隱蔽的房頂上張望虽填。 院中可真熱鬧,春花似錦曹动、人聲如沸斋日。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽恶守。三九已至,卻和暖如春贡必,著一層夾襖步出監(jiān)牢的瞬間兔港,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工仔拟, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衫樊,地道東北人。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓利花,卻偏偏與公主長得像橡伞,于是被迫代替她去往敵國和親盒揉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

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

  • ??JavaScript 與 HTML 之間的交互是通過事件實(shí)現(xiàn)的。 ??事件挂脑,就是文檔或?yàn)g覽器窗口中發(fā)生的一些特...
    霜天曉閱讀 3,498評論 1 11
  • 一藕漱、JS前言 (1)認(rèn)識JS 也許你已經(jīng)了解HTML標(biāo)記(也稱為結(jié)構(gòu)),知道了CSS樣式(也稱為表示)崭闲,會使用HT...
    凜0_0閱讀 2,774評論 0 8
  • 學(xué)習(xí)目標(biāo): 掌握API和Web API的概念 掌握常見的瀏覽器提供的API的調(diào)用方式 能通過API開發(fā)常見的頁面交...
    自敘閱讀 335評論 0 0
  • 前端開發(fā)知識點(diǎn) HTML&CSS對Web標(biāo)準(zhǔn)的理解肋联、瀏覽器內(nèi)核差異、兼容性刁俭、hack橄仍、CSS基本功:布局、盒子模型...
    Hebborn_hb閱讀 845評論 0 1
  • Week 1 Reading Material Lesson 1 Lecture 1.1 Raspberry Pi...
    Vinchent閱讀 508評論 0 1