亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
最近一位客戶要求我製作一個無障礙視頻播放器,她非常希望其中一個功能是音頻描述。音頻描述面向盲人或視力障礙者,提供額外的語音信息來描述重要的視覺細(xì)節(jié)。傳統(tǒng)上,帶有音頻描述的視頻必須專門製作,音頻編碼在單個視頻文件的單獨(dú)音軌中。這需要相當(dāng)專業(yè)的視頻編輯設(shè)備來編碼這些音頻軌道,這使得大多數(shù)內(nèi)容創(chuàng)作者難以實(shí)現(xiàn)。我在網(wǎng)上看到的所有帶有音頻描述的內(nèi)容都是這樣的。例如,BBC iPlayer 提供了一些此類內(nèi)容,但視頻播放器無法控制相對音量,也無法關(guān)閉音頻描述——您只能觀看節(jié)目的單獨(dú)描述版本或非描述版本。 HTML5 的登場
HTML5 視頻規(guī)範(fàn)確實(shí)提供了 audioTracks 對象,這使得實(shí)現(xiàn)開關(guān)按鈕並分別控制音頻和視頻音量成為可能。但它的瀏覽器支持幾乎不存在——在撰寫本文時,只有 IE10 支持此功能。無論如何,我的客戶想要的是一個單獨(dú)文件中的音頻描述,可以將其添加到視頻中,而無需創(chuàng)建單獨(dú)的版本,並且無需使用專用軟件即可輕鬆製作。當(dāng)然,它必須在相當(dāng)多的瀏覽器中運(yùn)行。所以我的下一個想法是使用 MediaController,這是 HTML5 音頻和視頻的一項(xiàng)功能,允許您同步多個來源。但是,對它的瀏覽器支持同樣很少——在撰寫本文時,只有 Chrome 支持此功能。但是您知道——即使沒有這種支持,同時啟動兩個媒體文件顯然也不是問題,只是需要保持同步。那麼,我們能否使用現(xiàn)有的、廣泛實(shí)現(xiàn)的功能來實(shí)現(xiàn)這一點(diǎn)呢?視頻事件
當(dāng)然,這只是一個簡單的概念驗(yàn)證演示——沒有初始功能檢測,它只具有本機(jī)“controls”屬性提供的基本控件。對於正確的實(shí)現(xiàn),它需要自定義控件,以提供(除其他外)一個開關(guān)音頻的按鈕和單獨(dú)的音量滑塊。界面也應(yīng)該可以通過鍵盤訪問,這在某些瀏覽器的本機(jī)控件中並非如此。它還需要正確處理緩衝——實(shí)際上,如果您搜索到視頻已預(yù)加載的點(diǎn)之後,音頻將繼續(xù)自由播放,直到視頻加載足夠多以將其重新同步為止。我還想提一下,描述本身幾乎達(dá)不到專業(yè)標(biāo)準(zhǔn)!那是您可以聽到我的聲音,使用 Audacity 錄製和轉(zhuǎn)換。但就是這樣,我認(rèn)為它有效地演示了這種方法的技術(shù)門檻有多低。我不必編輯視頻,而且我用免費(fèi)軟件在一小時內(nèi)製作了音頻。作為一個概念證明,我認(rèn)為它非常成功——我相信我的客戶會非常滿意!關(guān)於 HTML5 視頻的可訪問音頻描述的常見問題解答 (FAQ)
HTML5 視頻中可訪問音頻描述的重要性是什麼?
如何在我的 HTML5 視頻中添加音頻描述?
為什麼我的 HTML5 視頻無法播放?
HTML5 視頻支持哪些常用格式?
如何修復(fù)“找不到 HTML5 視頻文件”錯誤?
如何使我的 HTML5 視頻具有響應(yīng)性?
我可以向我的 HTML5 視頻添加字幕或旁白嗎?
如何控制我的 HTML5 視頻的播放?
我可以在我的網(wǎng)站上嵌入 HTML5 視頻嗎?
使用 HTML5 進(jìn)行視頻播放的好處是什麼?
首頁 web前端 js教程 HTML5視頻的可訪問音頻說明

HTML5視頻的可訪問音頻說明

Feb 23, 2025 am 08:48 AM

Accessible Audio Descriptions for HTML5 Video

要點(diǎn)總結(jié)

  • 傳統(tǒng)的視障人士輔助音頻描述需要專業(yè)的視頻編輯設(shè)備進(jìn)行編碼,將其嵌入視頻文件的單獨(dú)音軌中。對大多數(shù)內(nèi)容創(chuàng)作者來說,這個過程通常不切實(shí)際。
  • HTML5 視頻規(guī)範(fàn)提供了 audioTracks 對象,理論上允許為音頻描述實(shí)現(xiàn)開關(guān)按鈕,並分別控制音頻和視頻音量。但是,目前瀏覽器對該功能的支持有限。
  • 另一種解決方案是使用 MediaController,這是 HTML5 音頻和視頻的一項(xiàng)功能,允許同步多個來源。此功能目前在瀏覽器支持方面也受到限制,但可以使用現(xiàn)有的、廣泛實(shí)現(xiàn)的功能同時啟動兩個媒體文件並保持同步。
  • 視頻 API 提供了諸如“播放”、“暫?!薄ⅰ敖Y(jié)束”和“timeupdate”之類的事件,可用於將音頻播放與視頻事件同步。 “timeupdate”事件對於此目的尤為重要,平均每秒觸發(fā) 3-5 次。這種方法允許創(chuàng)建可訪問的音頻描述,而無需專門的軟件或視頻的單獨(dú)版本。

最近一位客戶要求我製作一個無障礙視頻播放器,她非常希望其中一個功能是音頻描述。音頻描述面向盲人或視力障礙者,提供額外的語音信息來描述重要的視覺細(xì)節(jié)。傳統(tǒng)上,帶有音頻描述的視頻必須專門製作,音頻編碼在單個視頻文件的單獨(dú)音軌中。這需要相當(dāng)專業(yè)的視頻編輯設(shè)備來編碼這些音頻軌道,這使得大多數(shù)內(nèi)容創(chuàng)作者難以實(shí)現(xiàn)。我在網(wǎng)上看到的所有帶有音頻描述的內(nèi)容都是這樣的。例如,BBC iPlayer 提供了一些此類內(nèi)容,但視頻播放器無法控制相對音量,也無法關(guān)閉音頻描述——您只能觀看節(jié)目的單獨(dú)描述版本或非描述版本。 HTML5 的登場

HTML5 視頻規(guī)範(fàn)確實(shí)提供了 audioTracks 對象,這使得實(shí)現(xiàn)開關(guān)按鈕並分別控制音頻和視頻音量成為可能。但它的瀏覽器支持幾乎不存在——在撰寫本文時,只有 IE10 支持此功能。無論如何,我的客戶想要的是一個單獨(dú)文件中的音頻描述,可以將其添加到視頻中,而無需創(chuàng)建單獨(dú)的版本,並且無需使用專用軟件即可輕鬆製作。當(dāng)然,它必須在相當(dāng)多的瀏覽器中運(yùn)行。所以我的下一個想法是使用 MediaController,這是 HTML5 音頻和視頻的一項(xiàng)功能,允許您同步多個來源。但是,對它的瀏覽器支持同樣很少——在撰寫本文時,只有 Chrome 支持此功能。但是您知道——即使沒有這種支持,同時啟動兩個媒體文件顯然也不是問題,只是需要保持同步。那麼,我們能否使用現(xiàn)有的、廣泛實(shí)現(xiàn)的功能來實(shí)現(xiàn)這一點(diǎn)呢?視頻事件

視頻 API 提供了許多我們可以掛鉤的事件,這些事件應(yīng)該可以使音頻播放與視頻事件同步:

  • “播放”事件(視頻播放時觸發(fā))。
  • “暫?!笔录ㄒ曨l暫停時觸發(fā))。
  • “結(jié)束”事件(視頻結(jié)束時觸發(fā))。
  • “timeupdate”事件(視頻播放時持續(xù)觸發(fā))。

“timeupdate”事件非常關(guān)鍵。它觸發(fā)的頻率沒有指定,實(shí)際上差異很大——但作為一個粗略的整體平均值,它相當(dāng)於每秒 3-5 次,這足以滿足我們的目的。我見過類似的方法來嘗試同步兩個視頻文件,但這並不特別成功,因?yàn)榧词故呛苄〉牟町愐埠苊黠@。但是音頻描述通常不需要如此精確地同步——無論哪種方式,100 毫秒的延遲都是可以接受的——而且播放音頻文件對瀏覽器的負(fù)擔(dān)要小得多。因此,我們只需要使用現(xiàn)有的視頻事件來將音頻和視頻播放鎖定在一起:

  • 視頻播放時,播放音頻。
  • 視頻暫停時,暫停音頻。
  • 視頻結(jié)束時,同時暫停視頻和音頻。
  • 時間更新時,如果音頻時間與視頻時間不同,則將音頻時間設(shè)置為與視頻時間匹配。

經(jīng)過一番試驗(yàn),我發(fā)現(xiàn)通過比較以秒為單位的時間可以獲得最佳效果,如下所示:

if(Math.ceil(audio.currentTime) != Math.ceil(video.currentTime)) {
  audio.currentTime = video.currentTime;
}

這看起來違反直覺,起初我以為我們需要盡可能精確的數(shù)據(jù),但事實(shí)似乎並非如此。通過使用視頻音軌的文字音頻副本(即音頻和視頻都產(chǎn)生相同的聲音)進(jìn)行測試,很容易聽到同步效果好壞。根據(jù)這個基礎(chǔ)進(jìn)行實(shí)驗(yàn),我發(fā)現(xiàn)四捨五入數(shù)字比不四捨五入得到更好的同步效果。因此,這是最終腳本。如果瀏覽器支持 MediaController,我們只需使用它,否則我們將實(shí)現(xiàn)手動同步,如下所述:

var video = document.getElementById('video');
var audio = document.getElementById('audio');

if(typeof(window.MediaController) === 'function') {
  var controller = new MediaController();
  video.controller = controller;
  audio.controller = controller;
} else {
  controller = null;
}

video.volume = 0.8;
audio.volume = 1;

video.addEventListener('play', function() {
  if(!controller && audio.paused) {
    audio.play();
  }
}, false);

video.addEventListener('pause', function() {
  if(!controller && !audio.paused) {
    audio.pause();
  }
}, false);

video.addEventListener('ended', function() {
  if(controller) {
    controller.pause();
  } else {
    video.pause();
    audio.pause();
  }
}, false);

video.addEventListener('timeupdate', function() {
  if(!controller && audio.readyState >= 4) {
    if(Math.ceil(audio.currentTime) != Math.ceil(video.currentTime)) {
      audio.currentTime = video.currentTime;
    }
  }
}, false);

請注意,MediaController 本身僅通過腳本定義,而可以使用靜態(tài)“mediagroup”屬性定義控制器:

<video mediagroup="foo"></video> ... <audio mediagroup="foo"> ... </audio>

如果我們這樣做,那麼它將在 Chrome 中無需 JavaScript 即可工作。它將同步媒體源,但用戶無法控制音頻(包括無法將其關(guān)閉),因?yàn)闉g覽器不知道音頻代表什麼。在這種情況下,最好將音頻編碼到視頻中,因?yàn)槿会崴梢猿霈F(xiàn)在 audioTracks 對像中,瀏覽器可以識別它並能夠提供本機(jī)控件。但是由於我們沒有 audioTracks 數(shù)據(jù),所以這是一個無關(guān)緊要的問題!因此,如果腳本不可用,音頻將根本無法播放。這是最終演示,它可以在任何最新版本的 Opera、Firefox、Chrome、Safari 或 IE9 或更高版本中運(yùn)行:- 音頻描述演示

當(dāng)然,這只是一個簡單的概念驗(yàn)證演示——沒有初始功能檢測,它只具有本機(jī)“controls”屬性提供的基本控件。對於正確的實(shí)現(xiàn),它需要自定義控件,以提供(除其他外)一個開關(guān)音頻的按鈕和單獨(dú)的音量滑塊。界面也應(yīng)該可以通過鍵盤訪問,這在某些瀏覽器的本機(jī)控件中並非如此。它還需要正確處理緩衝——實(shí)際上,如果您搜索到視頻已預(yù)加載的點(diǎn)之後,音頻將繼續(xù)自由播放,直到視頻加載足夠多以將其重新同步為止。我還想提一下,描述本身幾乎達(dá)不到專業(yè)標(biāo)準(zhǔn)!那是您可以聽到我的聲音,使用 Audacity 錄製和轉(zhuǎn)換。但就是這樣,我認(rèn)為它有效地演示了這種方法的技術(shù)門檻有多低。我不必編輯視頻,而且我用免費(fèi)軟件在一小時內(nèi)製作了音頻。作為一個概念證明,我認(rèn)為它非常成功——我相信我的客戶會非常滿意!關(guān)於 HTML5 視頻的可訪問音頻描述的常見問題解答 (FAQ)

HTML5 視頻中可訪問音頻描述的重要性是什麼?

可訪問音頻描述在使 HTML5 視頻更具包容性和用戶友好性方面發(fā)揮著至關(guān)重要的作用。它們提供了視覺信息的聽覺等效項(xiàng),這對視力障礙用戶尤其有益。這些描述敘述了主要音軌無法理解的重要視覺細(xì)節(jié)。通過加入可訪問的音頻描述,內(nèi)容創(chuàng)作者可以確保他們的視頻能夠被更廣泛的受眾訪問,從而促進(jìn)數(shù)字包容性。

如何在我的 HTML5 視頻中添加音頻描述?

將音頻描述添加到 HTML5 視頻包括幾個步驟。首先,您需要創(chuàng)建一個單獨(dú)的音頻軌道來描述視頻的視覺元素。這可以使用各種音頻編輯軟件來完成。一旦音頻描述軌道準(zhǔn)備就緒,您可以使用帶有設(shè)置為“descriptions”的 kind 屬性的 元素將其添加到您的 HTML5 視頻中。這將確保音頻描述軌道被識別並與視頻一起播放。

為什麼我的 HTML5 視頻無法播放?

您的 HTML5 視頻無法播放可能有幾個原因。這可能是由於視頻文件本身的問題,例如未正確編碼。這也可能是由於 Web 瀏覽器或視頻播放器不支持視頻格式的問題。要進(jìn)行故障排除,請嘗試在不同的瀏覽器或不同的設(shè)備上播放視頻。如果問題仍然存在,您可能需要檢查視頻文件並確保其格式受 HTML5 支持。

HTML5 視頻支持哪些常用格式?

HTML5 視頻支持幾種常見的視頻格式,包括 MP4、WebM 和 Ogg。 MP4 格式在所有主要瀏覽器和設(shè)備中都得到廣泛支持,使其成為網(wǎng)絡(luò)視頻的熱門選擇。 WebM 和 Ogg 是開源格式,也得到廣泛支持,儘管它們可能並非在所有瀏覽器中都能正常工作。

如何修復(fù)“找不到 HTML5 視頻文件”錯誤?

“找不到 HTML5 視頻文件”錯誤通常發(fā)生在瀏覽器找不到 <video></video> 元素的 source 屬性中指定的視頻文件時。要修復(fù)此錯誤,請確保 source 屬性中的文件路徑正確,並且視頻文件位於指定的路徑中。如果文件路徑正確,請檢查視頻文件是否採用 HTML5 和瀏覽器支持的格式。

如何使我的 HTML5 視頻具有響應(yīng)性?

要使您的 HTML5 視頻具有響應(yīng)性,您可以使用 CSS 將視頻的寬度設(shè)置為 100%,高度設(shè)置為 auto。這將確保視頻按比例放大或縮小以適應(yīng)其容器的寬度,使其能夠響應(yīng)不同的屏幕尺寸。

我可以向我的 HTML5 視頻添加字幕或旁白嗎?

是的,您可以使用帶有設(shè)置為“captions”或“subtitles”的 kind 屬性的 元素向您的 HTML5 視頻添加字幕或旁白。您需要創(chuàng)建一個包含字幕或旁白的 WebVTT 文件,然後在 元素的 src 屬性中引用此文件。

如何控制我的 HTML5 視頻的播放?

HTML5 提供了幾種內(nèi)置的視頻播放控件,包括播放、暫停、音量和全屏??梢酝ㄟ^向 <video></video> 元素添加 controls 屬性來啟用這些控件。此外,您可以使用 JavaScript 創(chuàng)建自定義控件和交互。

我可以在我的網(wǎng)站上嵌入 HTML5 視頻嗎?

是的,您可以使用 <video></video> 元素在您的網(wǎng)站上嵌入 HTML5 視頻。您需要使用 src 屬性指定視頻文件的來源,還可以添加可選屬性(如 controls、autoplay 和 loop)來自定義視頻播放。

使用 HTML5 進(jìn)行視頻播放的好處是什麼?

HTML5 為視頻播放提供了許多好處。它支持多種視頻格式,提供內(nèi)置的視頻播放控件,並允許添加諸如字幕和音頻描述之類的輔助功能。此外,HTML5 視頻可以具有響應(yīng)性,確保它們在所有設(shè)備和屏幕尺寸上看起來都很好。最後,由於 HTML5 是 Web 標(biāo)準(zhǔn),因此所有現(xiàn)代 Web 瀏覽器都支持它,無需額外的插件或軟件。

以上是HTML5視頻的可訪問音頻說明的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
如何在node.js中提出HTTP請求? 如何在node.js中提出HTTP請求? Jul 13, 2025 am 02:18 AM

在Node.js中發(fā)起HTTP請求有三種常用方式:使用內(nèi)置模塊、axios和node-fetch。 1.使用內(nèi)置的http/https模塊無需依賴,適合基礎(chǔ)場景,但需手動處理數(shù)據(jù)拼接和錯誤監(jiān)聽,例如用https.get()獲取數(shù)據(jù)或通過.write()發(fā)送POST請求;2.axios是基於Promise的第三方庫,語法簡潔且功能強(qiáng)大,支持async/await、自動JSON轉(zhuǎn)換、攔截器等,推薦用於簡化異步請求操作;3.node-fetch提供類似瀏覽器fetch的風(fēng)格,基於Promise且語法簡單

JavaScript數(shù)據(jù)類型:原始與參考 JavaScript數(shù)據(jù)類型:原始與參考 Jul 13, 2025 am 02:43 AM

JavaScript的數(shù)據(jù)類型分為原始類型和引用類型。原始類型包括string、number、boolean、null、undefined和symbol,其值不可變且賦值時復(fù)制副本,因此互不影響;引用類型如對象、數(shù)組和函數(shù)存儲的是內(nèi)存地址,指向同一對象的變量會相互影響。判斷類型可用typeof和instanceof,但需注意typeofnull的歷史問題。理解這兩類差異有助於編寫更穩(wěn)定可靠的代碼。

React與Angular vs Vue:哪個JS框架最好? React與Angular vs Vue:哪個JS框架最好? Jul 05, 2025 am 02:24 AM

選哪個JavaScript框架最好?答案是根據(jù)需求選擇最適合的。 1.React靈活自由,適合需要高度定制、團(tuán)隊(duì)有架構(gòu)能力的中大型項(xiàng)目;2.Angular提供完整解決方案,適合企業(yè)級應(yīng)用和長期維護(hù)的大項(xiàng)目;3.Vue上手簡單,適合中小型項(xiàng)目或快速開發(fā)。此外,是否已有技術(shù)棧、團(tuán)隊(duì)規(guī)模、項(xiàng)目生命週期及是否需要SSR也都是選擇框架的重要因素。總之,沒有絕對最好的框架,適合自己需求的就是最佳選擇。

JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 JavaScript時間對象,某人構(gòu)建了一個eactexe,在Google Chrome上更快的網(wǎng)站等等 Jul 08, 2025 pm 02:27 PM

JavaScript開發(fā)者們,大家好!歡迎閱讀本週的JavaScript新聞!本週我們將重點(diǎn)關(guān)注:Oracle與Deno的商標(biāo)糾紛、新的JavaScript時間對象獲得瀏覽器支持、GoogleChrome的更新以及一些強(qiáng)大的開發(fā)者工具。讓我們開始吧! Oracle與Deno的商標(biāo)之爭Oracle試圖註冊“JavaScript”商標(biāo)的舉動引發(fā)爭議。 Node.js和Deno的創(chuàng)建者RyanDahl已提交請願書,要求取消該商標(biāo),他認(rèn)為JavaScript是一個開放標(biāo)準(zhǔn),不應(yīng)由Oracle

處理諾言:鏈接,錯誤處理和承諾在JavaScript中 處理諾言:鏈接,錯誤處理和承諾在JavaScript中 Jul 08, 2025 am 02:40 AM

Promise是JavaScript中處理異步操作的核心機(jī)制,理解鍊式調(diào)用、錯誤處理和組合器是掌握其應(yīng)用的關(guān)鍵。 1.鍊式調(diào)用通過.then()返回新Promise實(shí)現(xiàn)異步流程串聯(lián),每個.then()接收上一步結(jié)果並可返回值或Promise;2.錯誤處理應(yīng)統(tǒng)一使用.catch()捕獲異常,避免靜默失敗,並可在catch中返回默認(rèn)值繼續(xù)流程;3.組合器如Promise.all()(全成功才成功)、Promise.race()(首個完成即返回)和Promise.allSettled()(等待所有完成)

什麼是緩存API?如何與服務(wù)人員使用? 什麼是緩存API?如何與服務(wù)人員使用? Jul 08, 2025 am 02:43 AM

CacheAPI是瀏覽器提供的一種緩存網(wǎng)絡(luò)請求的工具,常與ServiceWorker配合使用,以提升網(wǎng)站性能和離線體驗(yàn)。 1.它允許開發(fā)者手動存儲如腳本、樣式表、圖片等資源;2.可根據(jù)請求匹配緩存響應(yīng);3.支持刪除特定緩存或清空整個緩存;4.通過ServiceWorker監(jiān)聽fetch事件實(shí)現(xiàn)緩存優(yōu)先或網(wǎng)絡(luò)優(yōu)先等策略;5.常用於離線支持、加快重複訪問速度、預(yù)加載關(guān)鍵資源及後臺更新內(nèi)容;6.使用時需注意緩存版本控制、存儲限制及與HTTP緩存機(jī)制的區(qū)別。

利用Array.Prototype方法用於JavaScript中的數(shù)據(jù)操作 利用Array.Prototype方法用於JavaScript中的數(shù)據(jù)操作 Jul 06, 2025 am 02:36 AM

JavaScript數(shù)組內(nèi)置方法如.map()、.filter()和.reduce()可簡化數(shù)據(jù)處理;1).map()用於一對一轉(zhuǎn)換元素生成新數(shù)組;2).filter()按條件篩選元素;3).reduce()用於聚合數(shù)據(jù)為單一值;使用時應(yīng)避免誤用導(dǎo)致副作用或性能問題。

JS綜述:深入研究JavaScript事件循環(huán) JS綜述:深入研究JavaScript事件循環(huán) Jul 08, 2025 am 02:24 AM

JavaScript的事件循環(huán)通過協(xié)調(diào)調(diào)用棧、WebAPI和任務(wù)隊(duì)列來管理異步操作。 1.調(diào)用棧執(zhí)行同步代碼,遇到異步任務(wù)時交由WebAPI處理;2.WebAPI在後臺完成任務(wù)後將回調(diào)放入相應(yīng)的隊(duì)列(宏任務(wù)或微任務(wù));3.事件循環(huán)檢查調(diào)用棧是否為空,若為空則從隊(duì)列中取出回調(diào)推入調(diào)用棧執(zhí)行;4.微任務(wù)(如Promise.then)優(yōu)先於宏任務(wù)(如setTimeout)執(zhí)行;5.理解事件循環(huán)有助於避免阻塞主線程並優(yōu)化代碼執(zhí)行順序。

See all articles