主頁 > 前端設計 > JavaScript 模塊化

JavaScript 模塊化

2021-08-08 07:55:27 前端設計

模塊化

目標:
能夠說出模塊化的好處
能夠知道CommonJS規定了哪些內容
能夠說出Node.js 中模塊的三大分類各自是什么
能夠使用npm 管理包
能夠了解什么是規范的包結構
能夠了解模塊的加載機制

1 模塊化的基本概念

1.1 什么是模塊化

模塊化是指,解決一個復雜問題時,自頂向下逐層把系統劃分成若干模塊的程序,對于整個系統來說,模塊是可組合、分解和更換的單元

編程領域中的模塊化
編程領域中的模塊化,就是遵守固定的規則,把一個大檔案拆成獨立并互相依賴的多個小模塊,

把代碼進行模塊化拆分的好處:
提高了代碼的復用性
提高了代碼的可維護性
可以實作按需加載

1.2 模塊化規范

模塊化規范就是,對代碼進行模塊化的拆分與組合時,需要遵守的那些規則,
例如:
使用什么樣的語法格式來參考模塊
在模塊中使用什么樣的語法格式向外暴露成員

模塊化規范的好處:大家都遵守同樣的模塊化規范寫代碼,降低了溝通的成本,極大方便了各個模塊之間的相互呼叫,利人利己,

2 Node.js 中模塊化

2.1 Node.js 中模塊的分類

Node.js 中根據模塊來源的不同,將模塊分為了3大類,分別是:

  • 內置模塊 (內置模塊是由Node.js官方提供的,例如fs、path、http 等)
  • 自定義模塊(用戶創建的每個.js 檔案,都是自定義模塊)
  • 第三方模塊(由第三方開發出來的模塊,并非官方提供的內置模塊,也不是用戶創建的自定義模塊,使用前需要先下載)

2.2 加載模塊

使用強大的require()方法,可以加載需要的內置模塊、用戶自定義模塊、第三方模塊進行使用,
例如;

// 1.加載內置的fs模塊
const fs = require('fs') 

// 2.加載用戶的自定義模塊
const custom = require( './custom.js')

// 3.加載第三方模塊(關于第三方模塊的下載和使用,會在后面的課程中進行專門的講解)
const moment = require('moment')

注意:

  • 使用require()方法加載其它模塊時,會執行被加載模塊中的代碼,
  • 在使用require()加載用戶自定義模塊期間,可以省略.js 的后綴名,node 會自動補全,

2.3 node.js 中的模塊作用域

和函式作用域類似,在自定義模塊中定義的變數、方法等成員,只能在當前模塊內被訪問,這種模塊級別的訪問限制,叫做模塊作用域
好處:防止了全域變數污染的問題

2.4 向外共享模塊作用域中的成員

1.module物件
在每個.js 自定義模塊中都有一個module 物件,它里面存盤了和當前模塊有關的資訊

代碼:

console.log(module);

輸出的結果如下:
在這里插入圖片描述
2.module.exports 物件
在自定義模塊中,可以使用 module.exports 物件,將模塊內的成員共享出去,供外界使用,
外界用require()方法匯入自定義模塊時,得到的就是 module.exports所指向的物件,

在一個自定義模塊中,默認情況下,module.exports 是個空物件,

// 向module. exports 物件上掛載 username屬性module.exports. username = 'zs'

// 向module . exports 物件上掛載 sayHello方法module.exports.sayHello = function() {
	console.log( 'Hello! ')
}

3.exports物件
由于module.exports單詞寫起來比較復雜,為了簡化向外共享成員的代碼,Node 提供了exports 物件,默認情況下,exports 和module.exports 指向同一個物件,最終共享的結果,還是以module.exports 指向的物件為準,

// 1.向 module.exports 物件上掛載屬username
exports.username = 'zs'
// 2.向 module. exports物件上掛載方法sayHello
exports.sayHello = function() {
	console.log( 'Hello!')
}

// 3.讓 module.exports指向一個全新的物件
// 外界匯入該模塊時,module.exports指向的就是這個新的物件,
exports = (
	nickname: "小黑",sayti() {
	console.log('Hi!')
	}
}

4.共享成員時的注意點
使用require()方法匯入模塊時,匯入的結果,永遠以module.exports指向的物件為準,

// 1.向 module.exports 物件上掛載屬username
module.exports.username = 'zs'
// 2.向 module. exports物件上掛載方法sayHello
module.exports.sayHello = function() {
	console.log( 'Hello!')
}

// 3.讓module.exports指向一個全新的物件
// 外界匯入該模塊時,module.exports指向的就是這個新的物件,
module.exports = (
	nickname: "小黑",sayti() {
	console.log('Hi!')
	}
}

5.exports 和module.exports的使用誤區
時刻謹記,require()模塊時,得到的永遠是module.exports指向的物件:
在這里插入圖片描述

2.5 Node.js 中的模塊化規范

Node.,js遵循了CommonJS模塊化規范,CommonJS規定了模塊的特性各模塊之間如何相互依賴

CommonJS 規定:

  • 每個模塊內部,module 變數代表當前模塊,
  • module變數是一個物件,它的 exports屬性(即 module.exports是對外的介面
  • 加載某個模塊,其實是加載該模塊的 module.exports 屬性,require()方法用于加載模塊

3 npm 與包

3.1包

1.什么是包
Node.js 中的第三方模塊又叫做
就像電腦和計算機指的是相同的東西,第三方模塊和包指的是同一個概念,只不過叫法不同,

2.包的來源
不同于Node.js 中的內置模塊與自定義模塊,包是由第三方個人或團隊開發出來的,免費供所有人使用,
注意:Node.,js 中的包都是免費且開源的,不需要付費即可免費下載使用,

3.為什么需要包
由于Node.js 的內置模塊僅提供了一些底層的API,導致在基于內置模塊進行專案開發的時,效率很低,
包是基于內置模塊封裝出來的,提供了更高級、更方便的 API,極大的提高了開發效率,
包和內置模塊之間的關系,類似于 jQuery和瀏覽器內置API之間的關系,

4.從哪里下載包
國外有一家IT公司,叫做npm, Inc.這家公司旗下有一個非常著名的網站: https://www.npmjs.com/,它是全球最大的包共享平臺,你可以從這個網站上搜索到任何你需要的包,只要你有足夠的耐心!
到目前位置,全球約1100多萬的開發人員,通過這個包共享平臺,開發并共享了超過120多萬個包供我們使用,
npm, Inc.公司提供了一個地址為https://registry.npmjs.org/的服務器,來對外共享所有的包,我們可以從這個服務器上下載自己所需要的包,

注意:

  • 從https://www.npmjs.com/網站上搜索自己所需要的包
  • 從https://registry.npmjs.org/服務器上下載自己需要的包

3.2 npm 初體驗

1.格式化時間的傳統做法

  • 創建格式化時間的自定義模塊
  • 定義格式化時間的方法
  • 創建補零函式
  • 從自定義模塊中匯出格式化時間的函式
  • 匯入格式化時間的自定義模塊
  • 呼叫格式化時間的函式

⒉格式化時間的高級做法

  • 使用npm包管理工具,在專案中安裝格式化時間的包moment
  • 使用require(匯入格式化時間的包
  • 參考 moment的官方API檔案對時間進行格式化

3.在專案中安裝包的命令
如果想在專案中安裝指定名稱的包,需要運行如下的命令:

npm install 包的完整名稱

上述的裝包命令,可以簡寫成如下格式:

npm i 完整的包名稱

4.初次裝包后多了哪些檔案
初次裝包完成后,在專案檔案夾下多一個叫做node_modules 的檔案夾和package-lock.json 的組態檔,
node_modules檔案夾用來存放所有已安裝到專案中的包,require()匯入第三方包時,就是從這個目錄中查找并加載包,package-lockjson組態檔用來記錄node_modules目錄下的每一個包的下載資訊,例如包的名字、版本號、下載地址等,
注意:程式員不要手動修改node modules 或package-lockjson檔案中的任何代碼,npm包管理工具會自動維護它們,

5.安裝指定版本的包
默認情況下,使用npm install命令安裝包的時候,會自動安裝最新版本的包,如果需要安裝指定版本的包,可以在包名之后,通過**@符號**指定具體的版本,例如:

nmp i moment@2.22.2

6.包的語意化版本規范
包的版本號是以“點分十進制”形式進行定義的,總共有三位數字,例如2.24.0其中每一位數字所代表的的含義如下:
第1位數字:大版本 底層重構
第2位數字:功能版本
第3位數字:Bug修復版本

版本號提升的規則:只要前面的版本號增長了,則后面的版本號歸零,

3.3.3 包管理組態檔

npm規定,在專案根目錄中,必須提供一個叫做package.json 的包管理組態檔,用來記錄與專案有關的一些配置資訊,例如:

  • 專案的名稱、版本號、描述等
  • 專案中都用到了哪些包
  • 哪些包只在開發期間會用到
  • 那些包在開發部署時都需要用到

1.多人協作的問題
遇到的問題:第三方包的體積過大,不方便團隊成員之間共亨專案源代碼,
解決方案:共享時剔除 node_modules

2.如何記錄專案中安裝了哪些包
專案根目錄中,創建一個叫做 package.json 的組態檔,即可用來記錄專案中安裝了哪些包,從而方便剔除node_modules目錄之后,在團隊成員之間共亨專案的源代碼,

注意;今后在專案開發中,一定要把node modules檔案夾,添加到 .gitignore忽略檔案中,

3.快速創建package.json
npm包管理工具提供了一個快捷命令,可以在執行命令時所處的目錄中,快速創建 package.json 這個包管理組態檔:

作用:在執行命令所處的目錄中,快速新建package.json檔案
npm init -y

注意:

  • 上述命令只能在英文的目錄下成功運行!所以,專案檔案夾的名稱一定要使用英文命名,不要使用中文,不能出現空格
  • 運行npm install 命令安裝包的時候,npm包管理工具會自動把包的名稱版本號,記錄到package.json中,

4.dependencies節點
package.json檔案中,有一個dependencies節點,專門用來記錄您使用npm install命令安裝了哪些包,

5.一次性安裝所有包
當我們拿到一個剔除了 node_modules 的專案之后,需要先把所有的包下載到專案中,才能將專案運行起來,

否則會報類似于下面的錯誤:

  • Error: Cannot find module " moment"

可以運行npm install命令(或npm i)一次性安裝所有的依賴包:

//執行npm install 命令時,npm 包管理工具會先讀取package.json 中的dependencies節點, 
//讀取到記錄的所有依賴包名稱和版本號之后,npm包管理工具會把這些包一次性下載到專案中  
npm install

6.卸載包
可以運行npm uninstall命令,來卸載指定的包:

//使用npm uninstall具體的包名來卸載包
npm uninstall moment

注意: npm uninstall 命令執行成功后,會把卸載的包,自動從 package.json 的dependencies 中移除掉,

7.devDependencies節點
如果某些包只在專案開發階段會用到,在專案上線之后不會用到,則建議把這些包記錄到 devDependencies節點中,
與之對應的,如果某些包在開發專案上線之后都需要用到,則建議把這些包記錄到dependencies 節點中,

您可以使用如下的命令,將包記錄到devDependencies節點中:

// 安裝指定的包,并記錄到 devDependencies 節點中
npm i 包名 -D

// 注意:上述命令是簡寫形式,等價于下面完整的寫法:
npm install 包名 --save-dev

☆ 判斷是否放在devDependencies節點中,可以通過npm網站中的介紹,如下圖,有紅框標記部分的陳述句,則要放在devDependencies節點中,
在這里插入圖片描述

3.3.4 解決下包速度慢的問題

1.下包速度慢的原因
在使用npm 下包的時候,默認從國外的 https://registry.npmjs.org/服務器進行下載,此時,網路資料的傳輸需要經過漫長的海底光纜,因此下包速度會很慢,

2.淘寶NPM鏡像服務器
淘寶在國內搭建了一個服務器,專門把國外官方服務器上的包同步到國內的服務器,然后在國內提供下包的服務,從而極大的提高了下包的速度,
在這里插入圖片描述
擴展:
鏡像(Mirroring)是一種檔案存盤形式,一個磁盤上的資料在另一個磁捂上存在一個完全相同的副本即為鏡像,

3.切換npm的下包鏡像源
下包的鏡像源,指的就是下包的服務器地址

#查看當前的下包鏡像源
npm config get registry
#將下包的鏡像源切換為淘寶鏡像源
npm config set registry=https://registry.npm.taobao.org/
#檢查鏡像源是否下載成功
npm config get registry

4.nrm
為了更方便的切換下包的鏡像源,我們可以安裝 nrm 這個小工具,利用 nrm提供的終端命令,可以快速查看和切換下包的鏡像源,

#通過npm包管理器,將nrm安裝為全域可用的工具
npm i nrm -g
#查看所有可用的鏡像源
nrm ls
#將下包的鏡像源切換為taobao鏡像
nrm use taobao

3.3.5 包的分類

1.專案包
那些被安裝到專案的 node modules 目錄中的包,都是專案包,
專案包又分為兩類,分別是:

  • 開發依賴包 (被記錄到devDependencies節點中的包,只在開發期間會用到)
  • 核心依賴包(被記錄到dependencies 節點中的包,在開發期間和專案上線之后都會用到)

npm i 包名-D #開發依賴包(會被記錄到devDependencies節點下)
npm i 包名 #核心依賴包(會被記錄到 dependencies節點下)

2.全域包
在執行npm install命令時,如果提供了 -g 引數,則會把包安裝為全域包,
全域包會被安裝到C:\Users\用戶目錄\AppData\Roaming\npm\node_modules目錄下,

npm i 包名 -g #全域安裝指定的包
npm uninstall 包名 -g #卸載全域安裝的包

注意:

  • 只有工具性質的包,才有全域安裝的必要性,因為它們提供了好用的終端命令,
  • 判斷某個包是否需要全域安裝后才能使用,可以參考官方提供的使用說明即可,
    在這里插入圖片描述
    3.i5ting_toc
    i5ting_toc是一個可以把 md檔案轉為 html 頁面的小工具,使用步驟如下:
#將i5ting_ toc安裝為全域包
npm install -g i5ting_toc
#呼叫i5ting_toc,輕松實作md轉 html的功能
i5ting_toc -f 要轉換的md檔案路徑+檔案名 -o // -o代表轉換完成后自動打開轉換后的html頁面

3.3.6 規范的包結構

在清楚了包的概念、以及如何下載和使用包之后,接下來,我們深入了解一下包的內部結構
一個規范的包,它的組成結構,必須符合以下3點要求:

  • 包必須以單獨的目錄而存在
  • 包的頂級目錄下要必須包含 package.json這個包管理組態檔
  • package.json 中必須包含name、version、main這三個屬性,分別代表包的名字、版本號、包的入口,

注意:以上3點要求是一個規范的包結構必須遵守的格式,關于更多的約束,可以參考如下網址:
https://yarnpkg.com/zh-Hans/docs/package-json

3.3.7 開發屬于自己的包

439集待補

3.3.8 發布包

1.注冊npm賬號

  • 訪問https://www.npmjs.com/網站,點擊 sign up 按鈕,進入注冊用戶界面
  • 填寫賬號相關的資訊:Full Name、Public Email、Username、Password
  • 點擊Create an Account按鈕,注冊賬號
  • 登錄郵箱,點擊驗證鏈接,進行賬號的驗證

4 模塊的加載機制

4.1優先從快取中加載

模塊在第一次加載后會被快取,這也意味著多次呼叫require()不會導致模塊的代碼被執行多次,
注意:不論是內置模塊、用戶自定義模塊、還是第三方橫塊,它們都會優先從快取中加載,從而提高模塊的加載效率,

代碼:
1.js:

console.log('OK')

2.js

require('./1.js')
require('./1.js')
require('./1.js')

執行結果:只會輸出一遍OK

4.2 內置模塊的加載機制

內置模塊是由Node.js官方提供的模塊,內置模塊的加載優先級最高
例如,require(‘fs’)始侄訓傳內置的 fs 模塊,即使在node_modules目錄下有名字相同的包也叫做fs,

4.3 自定義模塊的加載機制

使用require()加載自定義模塊時,必須指定以 ./../ 開頭的路徑識別符號,在加載自定義模塊時,如果沒有指定./../這樣的路徑識別符號,則node 會把它當作內置模塊第三方模塊進行加載,

同時,在使用require()匯入自定義模塊時,如果省略了檔案的擴展名,則Node.js 會按順序分別嘗試加載以下的檔案:

  • 按照確切的檔案名進行加載補全
  • .js擴展名進行加載補全
  • .json擴展名進行加載
  • 補全.node 擴展名進行加載
  • 加載失敗,終端報錯

4.4 第三方模塊的加載機制

如果傳遞給 require() 的模塊識別符號不是一個內置模塊,也沒有以 ./’../開頭,則 Node.js 會從當前模塊的父目錄開始,嘗試從./node_modules 檔案夾中加載第三方模塊,

如果沒有找到對應的第三方模塊,則移動到再上一層父目錄中,進行加載,直到檔案系統的根目錄,

例如,假設在’C:\Users\itheima\project\foo.js’檔案里呼叫了require('tools'),則 Node,js 會按以下順序查找:

  1. C:\Users\itheima\project\node_modules\tools
  2. C:\Users\itheima\node_modules\itools
  3. C:\Users\node_modules\itools
  4. C:\node_modules\itools

4.5 目錄作為模塊

當把目錄作為模塊識別符號,傳遞給require()進行加載的時候,有三種加載方式:

  • 在被加載的目錄下查找一個叫做package.json的檔案,并尋找 main屬性,作為require()加載的入口
  • 如果目錄里沒有package.ison檔案,或者main入口不存在或無法決議,則 Node.is 將會試圖加載目錄下的 index.js 檔案
  • 如果以上兩步都失敗了,則Node,js 會在終端列印錯誤訊息,報告模塊的缺失:Error: Cannot find module 'xxx'

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/292364.html

標籤:其他

上一篇:JS 圖片切換

下一篇:jQuery實作點擊按鈕頁面 滾動到頂部,底部,指定位置

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more