Web APIs的應(yīng)用 2021-10-14

一.作用和分類

作用: 就是使用 JS 去操作 html 和瀏覽器

分類:DOM (文檔對象模型)、BOM(瀏覽器對象模型)

DOM 是文檔對象模型,操作網(wǎng)頁內(nèi)容筋栋,可以開發(fā)網(wǎng)頁內(nèi)容特效和實(shí)現(xiàn)用戶交互

二.獲取DOM對象

語法:? document.querySelector('css選擇器')

參數(shù):包含一個(gè)或多個(gè)有效的CSS選擇器 字符串

得到的是一個(gè)偽數(shù)組:有長度有索引號的數(shù)組,但是沒有 pop() push() 等數(shù)組方法,想要得到里面的每一個(gè)對象栈拖,則需要遍歷(for)的方式獲得绽族。

?//?1.?獲取單個(gè)元素:?document.querySelector('選擇器')

????????//?獲取?div.top???交集選擇器:?是div,同時(shí)擁有top類

????????let?box?=?document.querySelector('.top')

????????console.log(box)


????????//?獲取li標(biāo)簽

????????let?li?=?document.querySelector('.main?li')

????????console.log(li)


????????//?獲取最多獲取一個(gè)元素:?從上往下匹配到的第一個(gè)

????????//?獲取不到:?null

????????let?t?=?document.querySelector('top')???????????//?標(biāo)簽選擇器top標(biāo)簽

????????console.log(t)

????????//?2.?獲取多個(gè)元素:?document.querySelectorAll('選擇器')

????????let?lis?=?document.querySelectorAll('.main?li')

????????console.log(lis)


????????//?結(jié)果:?NodeList?[]??叫做偽數(shù)組:?長得像數(shù)組,?但是不是數(shù)組

????????//?長得像數(shù)組:?有l(wèi)ength屬性,?元素有下標(biāo),?從0開始:?可以下標(biāo)訪問,?也可以for循環(huán)遍歷

????????//?不是數(shù)組:?不能使用數(shù)組的API:?push()?||?shift()?||?splice()?都不能用


????????//?訪問第一個(gè)

????????console.log(lis[0])


????????//?訪問最后一個(gè)

????????console.log(lis[lis.length?-?1])


????????//?可以遍歷

????????for?(let?i?=?0;?i?<?lis.length;?i++)?{

????????????console.log(lis[i])

????????}


????????//?如果只有一個(gè)匹配呢??不管有多少個(gè),?一定是NodeList?的偽數(shù)組?[]

????????let?ts?=?document.querySelectorAll('top')

????????console.log(ts)

????????//?提醒:?如果是用到了document.querySelectorAll(),?得到的結(jié)果只有兩個(gè)作用

????????//?1.?下標(biāo)訪問:?結(jié)果[下標(biāo)]????2.?遍歷:?for循環(huán)(最多)


3?//?老舊方式

<div?class="content"?id="c">

????????<div?class="item">1</div>

????????<div?class="item">2</div>

????????<div?class="item">3</div>

????</div>

????<script>

????????//?老舊方式

????????//?1.?通過id的值獲取:?document.getElementById('id的值')

????????let?content?=?document.getElementById('c')

????????console.log(content)

????????//?2.?通過表簽名獲取:(多個(gè)),?document.getElementsByTagName('標(biāo)簽名')

????????let?divs?=?document.getElementsByTagName('div')

????????console.log(divs)

????????//?HTMLCollection對象:?[]?偽數(shù)組

????????//?3.?通過類名獲取:(多個(gè)),?document.getElementsByClassName('類名')

????????let?items?=?document.getElementsByClassName('item')

????????console.log(items)

????</script>

三.修改元素

1.元素文本

<div?class="box1">

????????我是<font?color='red'>小馬哥</font>

????</div>

????<div?class="box2">

????????我是<font?color='green'>小馬哥</font>

????</div>

????<script>

????????//?操作元素:?前提要先拿到元素

????????let?box1?=?document.querySelector('.box1')

????????let?box2?=?document.querySelector('.box2')

????????//?innerText:?標(biāo)簽文本

????????//?元素.innerText?獲取文本

????????//?元素.innerText?=?'值'??修改文本

????????console.log(box1.innerText)?????????//?只拿文本(不包含標(biāo)簽):?所有文本

????????box1.innerText?=?'<b>全部修改</b>'

????????//?修改成功:?但是標(biāo)簽沒有被解析(全部都是文本)

????????//?如果標(biāo)簽內(nèi)部都是文本:?就使用innerText(如果帶標(biāo)簽?就不用)

????????//?innerHTML:?標(biāo)簽內(nèi)容(包含文本和標(biāo)簽)

????????console.log(box2.innerHTML)?????????//?包含所有內(nèi)容,?包括標(biāo)簽和換行

????????box2.innerHTML?=?'<b>全部修改</b>'??//?標(biāo)簽可以被解析

????</script>

2.常用屬性

?<a?

????????//?產(chǎn)生隨機(jī)數(shù):?圖片序號是從1-9

????????let?rand?=?myRandom(1,?9)

????????//?console.log(rand)

????????//?修改圖片的src

????????img.src?=?`../素材/images/b0${rand}.jpg`

????</script>



一.屬性操作(表單)

1.type:input標(biāo)簽?

password?

text

2.value:所有表單屬性

獲取值:元素.value

修改值:元素.value=新值

3.checked:選中

true:選中

false:不選中

4.disabled:禁用

true:禁用

false:不禁用

二.定時(shí)器:間歇函數(shù)

本質(zhì):就是一個(gè)函數(shù)的調(diào)用

兩個(gè)參數(shù)

參數(shù)1:函數(shù)(代碼放到函數(shù)中)

參數(shù)2:時(shí)間間隔(單位上ms毫秒)

開啟定時(shí)器

let 變量=setInterval(函數(shù),時(shí)間間隔)

清除定時(shí)器:clearInterval(變量)

三.事件

事件: 給元素添加一段代碼, 用戶觸發(fā)后執(zhí)行相應(yīng)代碼

注冊事件addEventListener

元素.addEventListener('事件類型', 函數(shù))

給元素添加事件(給誰做)

類型: 用戶的觸發(fā)方式(怎么做)

函數(shù): 觸發(fā)后的處理效果(做什么)

事件三要素

1.事件源

2.事件類型

1.鼠標(biāo)

click單擊

mouseover鼠標(biāo)懸停

mouseout鼠標(biāo)移出

mouseenter鼠標(biāo)進(jìn)入

mouseleave鼠標(biāo)移出

2.鍵盤

keydown按下

keyup松開

3.文本

input內(nèi)容改變

4.焦點(diǎn)

focus得到焦點(diǎn)

blur失去焦點(diǎn)

3.事件處理函數(shù)

四.高階函數(shù)

變量可以存任何數(shù)據(jù), 包括函數(shù)

函數(shù)表達(dá)式

let 變量名 = function(){}

函數(shù)是匿名: 變量就是函數(shù)的名字

形參用來接收實(shí)參: 函數(shù)也是一種數(shù)據(jù)

函數(shù)當(dāng)成實(shí)參? ? ? ? ? ? ? ? ? ? ? ? ?//回調(diào)函數(shù)

接收函數(shù)參數(shù)的函數(shù): 主函數(shù)? ? ?//內(nèi)部調(diào)用回調(diào)函數(shù)

五.環(huán)境對象

函數(shù)內(nèi)部有一個(gè)關(guān)鍵字

this

一定是一個(gè)對象

指向: 誰調(diào)用, 代表誰

普通函數(shù): 本質(zhì)屬于window對象

里面的this指向window對象

六.編程思想

排他思想

元素: 兄弟關(guān)系

只有一個(gè)特殊, 其他都一樣

通用方法 :

先統(tǒng)一: 全部一樣(遍歷),再特殊: 自己特殊

七.節(jié)點(diǎn)操作

網(wǎng)頁一切皆節(jié)點(diǎn),重要節(jié)點(diǎn): 元素節(jié)點(diǎn)

查節(jié)點(diǎn)

1.找爸爸

子元素.parentElement //父元素

子元素.parentNode? ? ? ? //父節(jié)點(diǎn)

2.找兄弟

元素.previousElementSibling //前一個(gè)兄弟元素

元素.nextElementSibling? ? ? ? ? //后一個(gè)兄弟元素

3.找孩子

父元素.children //偽數(shù)組

父元素.firstElementChild? ? //第一個(gè)孩子元素

父元素.firstChild? ? ? ? ? ? ? ? ? //第一個(gè)孩子節(jié)點(diǎn)

父元素.lastElementChild? ? //最后一個(gè)孩子元素

新增節(jié)點(diǎn)

1.創(chuàng)建節(jié)點(diǎn)

document.createElement('標(biāo)簽')

默認(rèn)是空節(jié)點(diǎn)?追加屬性,追加樣式,追加樣式

2.追加節(jié)點(diǎn)

父元素.appendChild(子元素): 最小的孩子

父元素.insertBefore(新元素, 放誰的前面)

3.克隆節(jié)點(diǎn)

元素.cloneNode(布爾值)

默認(rèn)false淺克隆: 只有結(jié)構(gòu)

true: 深克隆(所有)

刪除節(jié)點(diǎn)

父元素.removeChild(子元素): 他殺

元素.remove(): 自殺

八.時(shí)間日期對象

作用: 但凡跟時(shí)間有關(guān), 都用得上

獲取對象

new Date(): 當(dāng)前時(shí)間對象

new Date('年-月-日 時(shí):分:秒'): 指定時(shí)間(字符串格式)

new Date(時(shí)間戳)

+new Date()

new Date().getTime()

Date.now()? ? ? ?簡單,只有一個(gè)作用

使用常用的方法

getFullYear(): 年

getMonth(): 月, 從0開始, 使用需要+1

getDate(): 日

getHours(): 時(shí)

getMinutes(): 分

getSeconds(): 秒

剩余時(shí)間倒計(jì)時(shí)

1. 先上定時(shí)器

2. 拿到目標(biāo)(未來結(jié)束時(shí)間) 時(shí)間戳

3. 減去當(dāng)前時(shí)間時(shí)間戳

4. 除以1000: 還原秒數(shù)(取整)

5. 轉(zhuǎn)換成時(shí)分秒(必要時(shí)候要算天)

小時(shí): 取整(時(shí)間戳 / 3600) % 24

分鐘: 取整(時(shí)間戳 / 60) % 60

秒: 時(shí)間戳 % 60

天: 取整(時(shí)間戳 / 3600 / 24)

九.事件對象

概念: 系統(tǒng)記錄用戶操作行為的對象

獲取事件對象: 事件回調(diào)函數(shù)中增加一個(gè)形參

event

ev

e(最常見)

常用屬性

相對元素偏移: e.offsetX && e.offsetY

相對body便宜: e.pageX && e.pageY? ? ? ?// 不受滾動影響

按鍵信息: e.key? ? //鍵盤事件

keydown(較多)

keyup


例:

document.querySelector('.box').addEventListener('click', function (e) {

? ? ? ? ? ? // 查看事件相關(guān)屬性

? ? ? ? ? ? console.log(e.type);// 查看事件類型

? ? ? ? ? ? console.log('可視坐標(biāo)', e.clientX, e.clientY);

? ? ? ? ? ? console.log('元素自身偏移坐標(biāo)', e.offsetX, e.offsetY);

? ? ? ? ? ? // 拓展:頁面坐標(biāo)系? pageX/pageY:永遠(yuǎn)距離body頂點(diǎn)

? ? ? ? ? ? console.log('頁面偏移', e.pageX, e.pageY);

? ? ? ? })



// 鍵盤事件

? ? ? ? document.addEventListener('keydown', function (e) {

? ? ? ? ? ? console.log(e.key);

? ? ? ? })

// 元素.click() 給予點(diǎn)擊

十.事件流

事件發(fā)生的過程

兩個(gè)階段

1.捕獲

從window到目標(biāo)

DOM2: addEventListener(,,觸發(fā)階段),默認(rèn)冒泡,true: 捕獲

2.冒泡

從目標(biāo)到window

作用: 事件委托

父子關(guān)系

孩子多, 動態(tài)

事件綁定給父元素

e.target區(qū)分目標(biāo)元素,標(biāo)簽節(jié)點(diǎn)名字: nodeName都是大寫,其他屬性也都可以區(qū)分

十一.事件取消

1.DOM0

on注冊事件

同一類型事件只能一個(gè), 后面的覆蓋前面

取消: on事件 = null

2.DOM2

addEventListener注冊事件

同一類型事件可以多個(gè)

取消: removeEventListener()? ?//只能取消有名回調(diào)

十二.window加載事件

1.load事件

必須等到所有內(nèi)容(包括圖片內(nèi)容)加載結(jié)束后才會執(zhí)行

2.DOMContentLoaded事件

只要結(jié)構(gòu)加載完畢就會觸發(fā)

十三.scroll家族

滾動家族: 元素或者頁面滾動的時(shí)候才用的上

一般都是頁面滾動

window的scroll事件

滾動距離,可以修改

scrollLeft: 左滾動

scrollTop: 上滾動

一般用html標(biāo)簽: document.documentElement

十四.offset家族

獲取元素的真實(shí)大小和偏移

1.大小

offsetWidth

offsetHeight

組成: border + padding + content

2.偏移

距離定位父級的距離

如果沒有到body的距離

offsetLeft

offsetTop

十五.client家族

可視家族: 做響應(yīng)式布局

可視大小

組成: padding + content

clientWidth

clientHeight

監(jiān)聽頁面大小改變,window的resize事件

十六.window對象

BOM(Browser Object Model ) 是瀏覽器對象模型

1.定時(shí)器-延時(shí)函數(shù)(setTimeout)

語法:setTimeout(回調(diào)函數(shù),等待毫秒)

僅僅只執(zhí)行一次

clearTimeout 清除由 setTimeout 創(chuàng)建的定時(shí)任務(wù)

2.JS執(zhí)行機(jī)制

同步,前一個(gè)任務(wù)結(jié)束后再執(zhí)行后一個(gè)任務(wù)者疤,程序的執(zhí)行順序與任務(wù)的排列順序是一致的苫纤、同步的

異步,可以同時(shí)做多種事情


由于主線程不斷的重復(fù)獲得任務(wù)互订、執(zhí)行任務(wù)吱肌、再獲取任務(wù)、再執(zhí)行仰禽,所以這種機(jī)制被稱為事件循環(huán)( event loop)氮墨。

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

二 .異步任務(wù),JS 的異步是通過回調(diào)函數(shù)實(shí)現(xiàn)的

1规揪、普通事件桥氏,如 click、resize 等

2猛铅、資源加載字支,如 load、error 等

3奸忽、定時(shí)器堕伪,包括 setInterval、setTimeout 等

3.location對象

1.location 的數(shù)據(jù)類型是對象栗菜,它拆分并保存了 URL 地址的各個(gè)組成部分

2.常用屬性和方法:

href 屬性獲取完整的 URL 地址欠雌,對其賦值時(shí)用于地址的跳轉(zhuǎn)

search 屬性獲取地址中攜帶的參數(shù),符號 苛萎?后面部分

hash 屬性獲取地址中的啥希值桨昙,符號 # 后面部分

reload 方法用來刷新當(dāng)前頁面,傳入?yún)?shù) true 時(shí)表示強(qiáng)制刷新

4.navigator對象

navigator的數(shù)據(jù)類型是對象腌歉,該對象下記錄了瀏覽器自身的相關(guān)信息

常用屬性和方法:通過 userAgent 檢測瀏覽器的版本及平臺

5.histroy對象

history 的數(shù)據(jù)類型是對象蛙酪,該對象與瀏覽器地址欄的操作相對應(yīng),如前進(jìn)翘盖、后退桂塞、歷史記錄等

常用屬性和方法:

后退功能:back()

前進(jìn):forward()

前進(jìn)后退功能:go()參數(shù)? 0是刷新,正是前進(jìn)的頁面數(shù)量,負(fù)是后退的數(shù)量

十七.swiper 插件

熟悉官網(wǎng),了解這個(gè)插件可以完成什么需求 https://www.swiper.com.cn/

看在線演示,找到符合自己需求的demo https://www.swiper.com.cn/demo/index.html

查看基本使用流程 https://www.swiper.com.cn/usage/index.html

查看APi文檔,去配置自己的插件 https://www.swiper.com.cn/api/index.html

注意: 多個(gè)swiper同時(shí)使用的時(shí)候, 類名需要注意區(qū)分

十八.本地存儲

本地存儲特性

1、數(shù)據(jù)存儲在用戶瀏覽器中

2馍驯、設(shè)置阁危、讀取方便、甚至頁面刷新不丟失數(shù)據(jù)

3汰瘫、容量較大狂打,sessionStorage和localStorage約 5M 左右

localStorage

1、生命周期永久生效混弥,除非手動刪除 否則關(guān)閉頁面也會存在

2趴乡、可以多窗口(頁面)共享(同一瀏覽器可以共享)

3. 以鍵值對的形式存儲使用

4.語法:localStorage.setItem('名字',內(nèi)容)

內(nèi)容:JSON.stringify(復(fù)雜數(shù)據(jù)類型)

將復(fù)雜數(shù)據(jù)轉(zhuǎn)換成JSON字符串 存儲 本地存儲中

內(nèi)容:JSON.parse(JSON字符串)

將JSON字符串轉(zhuǎn)換成對象 取出 時(shí)候使用

十九.正則表達(dá)式

各種常用表達(dá)式:https://c.runoob.com/front-end/854/

作用:驗(yàn)證數(shù)據(jù)

1.語法

1. 定義規(guī)則:/規(guī)則/

2. 驗(yàn)證規(guī)則

test(): 驗(yàn)證有效性, 布爾結(jié)果true:驗(yàn)證成功? ;false:驗(yàn)證失敗

exec():匹配數(shù)據(jù)??null:匹配失敗;? 偽數(shù)組:匹配成功

2.規(guī)則

一.元字符

1.邊界符??^起始? ? 結(jié)束$

2量詞

標(biāo)準(zhǔn)

*:0-N次

+:1-N次

?:0或1次

通用? {}

{n}:固定次數(shù)

{n,}:至少n次

{n,m}:n-m區(qū)間次數(shù)

3.字符類

[]:多選1

-:連接符蝗拿,方便快速指定多個(gè)(放[]里面)

a-z

A-Z

0-9

^:取反([]里面)

.:非換行單個(gè)字符

4.預(yù)定義類

一些常見操作的簡化

\d:[0-9]? ? ?\D:[^0-9]

\w:[a-zA-Z0-9_]? ? ?\W:取反

\s:[\r\n\t\v\f]? ? ?\S:取反


二.修飾符

/表達(dá)式/修飾符

i:非嚴(yán)格模式:不區(qū)分大小寫

g:全局匹配


三.字符替換

replace 替換

語法:? 字符串.replace(/正則表達(dá)式/,'替換的文本')

經(jīng)典用法:過濾敏感字

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末晾捏,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哀托,更是在濱河造成了極大的恐慌惦辛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仓手,死亡現(xiàn)場離奇詭異胖齐,居然都是意外死亡玻淑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門市怎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岁忘,“玉大人,你說我怎么就攤上這事区匠「上瘢” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵驰弄,是天一觀的道長麻汰。 經(jīng)常有香客問我,道長戚篙,這世上最難降的妖魔是什么五鲫? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮岔擂,結(jié)果婚禮上位喂,老公的妹妹穿的比我還像新娘。我一直安慰自己乱灵,他們只是感情好塑崖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痛倚,像睡著了一般规婆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蝉稳,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天抒蚜,我揣著相機(jī)與錄音,去河邊找鬼耘戚。 笑死嗡髓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的收津。 我是一名探鬼主播器贩,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼朋截!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吧黄,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤部服,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拗慨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體廓八,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奉芦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年剩瓶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腊凶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片需五。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡矾芙,死狀恐怖灵临,靈堂內(nèi)的尸體忽然破棺而出劫拢,到底是詐尸還是另有隱情褐奥,我是刑警寧澤仰挣,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布冒冬,位于F島的核電站伸蚯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏简烤。R本人自食惡果不足惜剂邮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望横侦。 院中可真熱鬧挥萌,春花似錦、人聲如沸枉侧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棵逊。三九已至伤疙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辆影,已是汗流浹背徒像。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛙讥,地道東北人锯蛀。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像次慢,于是被迫代替她去往敵國和親旁涤。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355