天天看點

webAPI-DOMwebAPI-DOM

webAPI-DOM

目錄

  • JavaScript與ECMAScript+
  • DOM
  • 時間對象屬性與方法的集合體
  • 定時器函數
  • 案例

1.1-JavaScript與ECMAScript

目标:知道 ECMAScript 與 JavaScript 的關系,Web APIs 是浏覽器擴充的功能

  • ECMAScript 是一套文法标準
    • 簡稱ES
  • 我們之前學的文法其實就是 ECMAScript 裡的文法
    • 變量、資料類型、運算等規則都是 ECMAScript 規定的
  • JavaScript 是什麼?
    • 遵守 ECMAScript 規則的一套程式設計語言
    • 嚴格來講,ECMAScript 配合浏覽器提供的 Web APIs 才稱之為 JavaScript
  • Web APIs 是什麼?
    • 浏覽器提供的一套操作浏覽器、頁面内容的功能(主要是一些對象和方法 )

1.2-JavaScript和node.js

webAPI-DOMwebAPI-DOM

二、DOM

2.1 DOM概念

  1. 什麼是DOM
    • 把HTML相關标簽當作對象處理
  2. DOM樹
    • 把HTML頁面當作頁面,叫做DOM樹脂
  3. DOM節點
    • HTML頁面每一個标簽叫做DOM節點、元素對象;element
  4. document
    • DOM樹 整個文檔 對象(屬性和方法結合體) { } [ ] 萬物皆對象:标簽

2.1.1 DOM是什麼

目标:能說出DOM是什麼

DOM是什麼?

DOM是浏覽器提供的一套專門用來操作網頁内容的功能
  • DOM的核心思想
    • 把網頁内容當做對象來處理
  • DOM作用
    • 開發網頁内容特效和實作使用者互動
  • DOM全稱
    • Document Object Model(文檔對象模型)

2.1.2 DOM樹

目标:能說出DOM樹是什麼

  • DOM樹是什麼
    1. 将 HTML 文檔以樹狀結構直覺的表現出來,我們稱之為文檔樹或 DOM 樹
    2. 描述網頁内容關系的名詞
    3. 作用:文檔樹直覺的展現了标簽與标簽之間的關系
webAPI-DOMwebAPI-DOM

2.1.3 DOM節點

目标:能說出DOM節點的類型

  1. DOM節點
    • DOM樹裡每一個内容都稱之為節點
  2. 節點類型
    1. 元素節點
      • 所有的标簽 比如 body、 div
      • html 是根節點
    2. 屬性節點
      • 所有的屬性 比如 href
    3. 文本節點
      • 所有的文本
    4. 其他

2.1.4 document

目标:能說出document對象的作用

  • document
    • 是 DOM 裡提供的一個對象
    • 是以它提供的屬性和方法都是用來通路和操作網頁内容的

       例:document.write()

    • 代表浏覽器顯示網頁内容的區域
    • 網頁所有内容都在document裡面
    • document 是學習 DOM 的核心
      webAPI-DOMwebAPI-DOM

2.1 DOM概念總結

目标:知道 DOM 相關的概念,建立對 DOM 的初步認識

  1. DOM是什麼?
    • 文檔對象模型
    • DOM是浏覽器提供的一套專門用來操作網頁内容的功能
  2. DOM 樹是什麼?
    • 将 HTML 文檔以樹狀結構直覺的表現出來,我們稱之為文檔樹或 DOM 樹
    • 作用:文檔樹直覺的展現了标簽與标簽之間的關系
  3. DOM 節點是什麼?
    • DOM樹裡每一個内容都稱之為節點
    • 常見的DOM 節點類型: 元素節點、屬性節點、文本節點等
  4. document 是什麼?
    • 是 DOM 裡提供的一個對象,用來通路和操作網頁内容的

2.2 查找元素節點

目标:能查找元素DOM節點
  • HTML 中任意标簽都是**【元素類型節點】**
  • 是以: 查找元素節點就是選擇頁面中标簽元素
  1. 根據 id 來查找dom元素節點
    ​ 文法:document.getElementById(‘标簽的id’);
    • 根據id查找标簽
    • 傳入的id是字元串,記得加引号,直接寫id名即可,不需要加 #
    • 傳回一個比對到 ID 的 DOM Element 對象(所有節點都是對象)
    • 找不到會得到null
    • 可以通過對象裡面的 nodeType 屬性來辨別節點類型
// 方法:
        // 翻譯:  get擷取得到  Element元素  by通過   id:标簽唯一辨別
        // 作用:擷取元素對象
        // 參數:字元串、放入找哪個标簽ID值,注意不要選擇器,沒有#
        // 傳回:
        document.getElementById();
           
  1. 查找html和body元素節點
// html:第二的單詞首字母大寫,不常用
// console.log(document.documentElement)
        // body
        // console.log(document.body)
        // webAPI:推薦放在body後面
           

2.3 操作元素節點

目标:能夠操作元素節點更改元素的屬性和文本内容

提問:操作标簽我們都可以做哪些修改?

 标簽的屬性 比如更換圖檔修改 img的src 屬性

 标簽的文本内容

  1. 直接修改元素的屬性

    文法: 對象. 屬性 = 值
    舉例說明:
     //1.擷取DOM節點:對象
            let img = document.getElementById("pic")
            // 2.操作DOM節點:屬性和方法結合體
            //獲img.src=取屬性?  src alt width  都是DOM節點自帶屬性名
            //   img.src  imd.id   點文法擷取
            //設定屬性 ?
            img.src = "./images/b03.jpg";
            img.alt = "啊哈哈哈哈哈";
            img.width = "700";
               
  2. 通過 setAttribute 方法修改

    文法:對象.setAttribute(‘屬性’,‘值’)
    /*   設定屬性方法:DOM節點上帶方法
              單詞:set 設定  Attribute 屬性
              參數:
                  第一:設定哪個屬性字元串,
                  第二:設定的屬性值; */
            img.setAttribute("src", "./images/b07.jpg")
            //目前:兩個方式功能一樣,推薦使用簡單  對象.屬性名 
               
  3. 修改元素的樣式

    文法:對象.style.樣式屬性 = 值
    webAPI-DOMwebAPI-DOM
    //1.擷取寬度
      let div = document.getElementById("box")
    /*  2.擷取
        剛才為什麼可以 ? dom : img有這樣設定 width = 500
        現在是div: style = "width:30epx;height: 300px;"
         注意: 具體某個屈性名如何是連字元, 轉換為駝峰命名規則隻能擷取行内樣式:*/
    console.log(div.width, div.style.width, div.style.backgroundColor)
    div.style.width = '600px';
    //css 屬性的 -連接配接符與js的減運算符
    div.style.backgroundColor = '#333';
               
    案例1-随機變化背景案例:
    <style>
            body {
                /* 不需要設定寬度,設定背景圖有效! */
                background: url(../代碼/images/b01.jpg) no-repeat;
            }
        </style>
    </head>
    <body>
        <script>
            //需求:重新整理頁面,背景圖随機換一個
            // 步驟:  1.擷取dom節點
            let body = document.body;
            //随機:1-9随機的一個整數
            let i = Math.floor(Math.random() * 9) + 1;
            //2.設定背景圖檔:
            body.style.background = `url(../代碼/images/b0${i}.jpg) no-repeat`;
        </script>
    </body>
               

2.3.2 操作元素文本

目标:能夠修改元素的文本更換内容

  1. document.write
    • 隻能将文本内容追加到
    • 文本中包含的标簽會被解析
      //永遠都隻是追加操作,且隻能位置</body>前
      document.write( 'Hello world ! ' );
      document.write( ' <h3>你好,世界!</h3>')
                 
  2. innerText 屬性
  • 将文本内容添加/更新到任意标簽位置
  • 文本中包含的标簽不會被解析
    l /innerText将文本内容添加/更新到任意标簽位置
    let info = document.getElementById( ' info ')
    //intro.innerText =‘嗨~我叫李雷!’
    info.innerText = '<h4>嗨~我叫李雷!</h4>'
               
    //問
    let ul = document.getElementById("demo")
    ul.innerHTML = "<h2>哈哈大大</h2>"
     console.log(ul.innerText, ul.innerHTML)
               

操作元素小結

  1. 操作元素屬性有哪些方式?
    • 點文法操作屬性(推薦) 對象.屬性
    • setAttribute(‘屬性’, ‘值’)
    • 對象.style.樣式名
  2. 操作元素文本有哪些方式?
    • document.write()
    • innterText 不解析标簽
    • innerHTML 解析标簽

三、時間對象

目标:掌握時間對象,可以讓網頁顯示時間

  • 時間對象:用來表示時間的對象
  • 作用:可以得到目前系統時間
  • 學習路徑:
    1. 執行個體化
    2. 時間對象方法
    3. 時間戳

3.1 執行個體化

  • 在代碼中發現了 new 關鍵字時,一般将這個操作稱為執行個體化
  • 建立一個時間對象并擷取時間
    • 獲得目前時間
      let date = new Date( )
    • 獲得指定時間
      let date = new Date(‘1949-10-01’)

3.2 時間對象方法

目标:能夠使用時間對象中的方法寫出常見日期

  • 因為時間對象傳回的資料我們不能直接使用,是以需要轉換為實際開發中常用的格式
    方法 作用 說明
    getFullYear() 獲得年份 擷取四位年份
    getMonth() 獲得月份 取值為 0 ~ 11
    getDate() 擷取月份中的每一天 不同月份取值也不相同
    getDay() 擷取星期 取值為 0 ~ 6
    getHours() 擷取小時 取值為 0 ~ 23
    getMinutes() 擷取分鐘 取值為 0 ~ 59
    getSeconds() 擷取秒 取值為 0 ~ 59

    案例2-頁面顯示時間案例:

<div id="box"></div>
    <script>
        // 需求:頁面某個盒子  顯示系統時間
        //  個位數,0-9  雙位數
        function fn(num) {
            if (num < 10) {
                num = '0' + num
            }
            return num;
        }
        //步驟
        //1.得到時間對象
        let time = new Date();
        //2.對象上方法執行,擷取對于資料
        let Y = time.getFullYear();
        let M = time.getMonth() + 1;
        M = fn(M);
        let D = time.getDate();
        D = fn(D);
        let h = time.getHours();
        h = fn(h);
        let a = time.getMinutes()
        a = fn(a)
        // 秒
        let t = time.getSeconds()
        t = fn(t)
        let div = document.getElementById("box")
        document.write(`${Y}-${M}-${D}-${h}:${a}:${t}`)
        /* 重點:
            1.學會時間對象方法使用
            2.練習ES6模闆字元串
            3.函數封裝:
            什麼時候用 ? 發現某個代碼邏輯在上下文某些地方重複出現;
             關注: 是否需要淩置形參 ? 調用的時侯我是否需要傳入實參
                是否需要設定傳回值 ? 調用的時候,是否需要傳回一個資料! */
    </script>
           

3.3 時間戳

目标:能夠獲得目前時間戳

  • 什麼是時間戳
    • 是指1970年01月01日00時00分00秒起至現在的毫秒數,它是一種特殊的計量時間的方式
  • 三種方式擷取時間:
      1. 使用 Date().now()
    • console.log(Date.now())
    • 無需執行個體化
    • 但是隻能得到目前的時間戳, 而前面兩種可以傳回指定時間的時間戳

案例:擷取時間戳

<div id="time"></div>
    <script>
        let fn = function () {
            let time1 = new Date()
            let time2 = new Date("2021-11-11 0:0:0");
            //2.得到時間戳
            let numb1 = +time1
            let numb2 = +time2
            // 3.時間戳:s
            let cha = (numb2 - numb1) / 1000;
            //天
            let day = Math.floor(cha / (24 * 60 * 60));
            //時:
            let hours = Math.floor(cha / 3600) % 24;
            //分
            let m = Math.floor(cha / 60) % 60;
            //秒:
            let s = Math.floor(cha) % 60;
            //如何設定顯示在頁面當中
            let div = document.getElementById('time');
            div.innerText = `我是秒男:${day}天-${hours}時-${m}分-${s}秒-馬上秒射`;
        }
        fn();
        setInterval(fn, 1000);
    </script>
           

3.時間對象總結

目标:掌握時間對象,可以讓網頁顯示時間

  1. 執行個體化時間對象
    • new Date()
  2. 時間對象方法
    • 時間對象裡面的方法轉換實際所用
  3. 時間戳
    • date.getTime()
    • +new Date()
    • Date.now()
    • 重點記住 +new Date() 因為可以傳回目前時間戳或者指定的時間戳

四、定時器函數

目标:能夠使用定時器函數建立定時任務

  • 學習路徑:
    1. 定時器函數介紹
    2. 定時器函數基本使用

4.1 定時器函數介紹

目标:能夠說出定時器函數在開發中的使用場景

  • 網頁中經常會需要一種功能:每隔一段時間需要自動執行一段代碼
  • 例如:網頁中的倒計時
  • 要實作這種需求,需要定時器函數

    [外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳(img-3nW16UmX-1618214020606)(C:\Users\27222\AppData\Roaming\Typora\typora-user-images\image-20210403164939683.png)]

4.2 定時器函數使用

目标:能夠使用定時器函數重複執行代碼

  1. 開啟定時器
    ​ setInterval(函數,間隔時間)
    • ​ 作用:每隔一段時間調用這個函數
    • 間隔時間機關是毫秒

案例:畢業倒計時

  1. 關閉定時器

    ​ let 變量名 = setInterval(函數,間隔時間)

    ​ clearInterval(變量名)

    一般不會剛建立就停止,而是滿足一定條件再停止

案例4.1:倒計時效果

// 需求:1.console 輸出 123456
         let index = 0
         let fn = function () {
             index++
             console.log(index)
         }
         setInterval(fn,1000)


        //2.1-9當index數值10的時候,回到0,列印1
        let index = 0
        let fn = function () {
            index++;
            if (index == 10) {
                index = 1;
            }
            console.log(index)
        }
        setInterval(fn, 500)
           

案例4.2:網頁輪播圖效果

<img src="../代碼/images/desktop_1.jpg" id="pic" width="50%">
let index = 0;
        let fn = function () {
            index++;
            //1.index: 1-9
            if (index == 10) {
                index = 1;
            }
            //2.設定圖檔,找到圖檔,過去dom節點
            let img = document.getElementById('pic')
            //3.設定圖檔位址
            img.src = `../代碼/images/desktop_${index}.jpg`
        }
        fn();
        setInterval(fn, 2000)
           

四、定時器函數小結

  1. 定時器函數有什麼作用?
    • 可以根據時間自動重複執行某些代碼
  2. 定時器函數如何開啟?
    • setinterval(函數名, 時間)
  3. 定時器函數如何關閉?
    let 變量名 = setInterval(函數,間隔時間)
    ​	clearInterval(變量名)
               

案例4.3-定時器關閉

// 需求2:5s後重試
        let index = 5
        let timer;
        let fn = function () {
            index--;
            //1.擷取DOM
            let btn = document.getElementById("btn")
            // 2.設定文本字
            btn.innerText = `${index}s後重試`
            //3.判斷當index 不能繼續往下走,停止定時器;
            if (index == 1) {
                clearInterval(timer)
            }
        }
        timer = setInterval(fn, 1000);