初識JS_API基礎Day4——筆記整理+JS運行機制+1課後作業+藍瘦香菇...

一. 常用的鍵盤事件

1. 鍵盤事件

在這裏插入圖片描述
在這裏插入圖片描述

2. 鍵盤事件對象

在這裏插入圖片描述

二. BOM

1 . 什麼是BOM
在這裏插入圖片描述

2 . window對象的常見事件
頁面(窗口)加載事件(2種)
第1種
在這裏插入圖片描述
window.onload 是窗口 (頁面)加載事件,當文檔內容完全加載完成會觸發該事件(包括圖像、腳本文件、CSS 文件等), 就調用的處理函數。
第二種
在這裏插入圖片描述DOMContentLoaded 事件觸發時,僅當DOM加載完成,不包括樣式表,圖片,flash等等。

​ IE9以上才支持!!!

3.調整窗口大小事件
在這裏插入圖片描述
注意:

①. 只要窗口大小發生像素變化,就會觸發這個事件。

② . 常利用這個事件完成響應式佈局window.innerWidth 當前屏幕的寬度


4 . 定時器(兩種)

window 對象給我們提供了 2 個非常好用的方法-定時器。

  • setTimeout() 回調函數

  • setInterval()

在這裏插入圖片描述
5.停止定時器

 // 停止定時器
clearTimeout(timer);

6 . setInterval() 鬧鐘定時器

7 . location對象

URL常用屬性:
在這裏插入圖片描述
location對象常見屬性:
在這裏插入圖片描述

location對象的常見方法:
在這裏插入圖片描述

8 . history對象

在這裏插入圖片描述

9.navigator對象

​ navigator 對象包含有關瀏覽器的信息,它有很多屬性,我們最常用的是 userAgent,該屬性可以返回由客戶機發送服務器的 user-agent 頭部的值。

下面前端代碼可以判斷用戶那個終端打開頁面,實現跳轉

if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) {
    window.location.href = "";     //手機
 } else {
    window.location.href = "";     //電腦
 }

面試常問☆:
JS運行機制:

1 . JS 是單線程

單線程就意味着,所有任務需要排隊,前一個任務結束,纔會執行後一個任務。如果前一個任務耗時很長,後一個任務就不得不一直等着。
這樣所導致的問題是: 如果 JS 執行的時間過長,這樣就會造成頁面的渲染不連貫,導致頁面渲染加載阻塞的感覺。

2 . 同步任務和異步任務

​ 單線程導致的問題就是後面的任務等待前面任務完成,如果前面任務很耗時(比如讀取網絡數據),後面任務不得不一直等待!!

​ 爲了解決這個問題,利用多核 CPU 的計算能力,HTML5 提出 Web Worker 標準,允許 JavaScript 腳本創建多個線程,但是子線程完全受主線程控制。於是,JS 中出現了同步任務異步任務

① 同步

​ 前一個任務結束後再執行後一個任務,程序的執行順序與任務的排列順序是一致的、同步的。比如做飯的同步做法:我們要燒水煮飯,等水開了(10分鐘之後),再去切菜,炒菜。

② 異步

​ 你在做一件事情時,因爲這件事情會花費很長時間,在做這件事的同時,你還可以去處理其他事情。比如做飯的異步做法,我們在燒水的同時,利用這10分鐘,去切菜,炒菜。

JS中所有任務可以分成兩種,一種是同步任務(synchronous),另一種是異步任務(asynchronous)。
同步任務指的是:
在主線程上排隊執行的任務,只有前一個任務執行完畢,才能執行後一個任務;
異步任務指的是:
不進入主線程、而進入”任務隊列”的任務,當主線程中的任務運行完了,纔會從”任務隊列”取出異步任務放入主線程執行。

在這裏插入圖片描述

3.JS執行機制(事件循環)
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述


作業部分:
題目描述

頁面上有一個電子時鐘,顯示當前的年月日,時分秒,要求自動變化,具體表現如下圖:
在這裏插入圖片描述

1)要求雙位顯示,例如:九點九分九秒,顯示爲09:09:09

<body>
    <div></div>
    <script>
        var div = document.querySelector('div');
        getTimer()
        setInterval(getTimer, 1000);

        function getTimer() {
            var time = new Date();
            var year = time.getFullYear();
            var month = time.getMonth() + 1;
            var dates = time.getDate();
            var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
            var day = time.getDay();
            var h = time.getHours();
            h = h < 10 ? '0' + h : h;
            var m = time.getMinutes();
            m = m < 10 ? '0' + m : m;
            var s = time.getSeconds();
            s = s < 10 ? '0' + s : s;
            div.innerHTML = year + '年' + month + '月' + dates + '日' + arr[day] + h + ':' + m + ':' + s;
        }
    </script>
</body>

分享

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章