第13章 歷久彌新的事件

2022-01-10 13:09:31 字數 1588 閱讀 2571

目錄3. 處理事件

3.2 自定義事件

事件迴圈通常至少需要兩個任務佇列:

兩種佇列在同一時刻都只執行乙個任務

單次迴圈迭代中,最多處理乙個巨集任務(其餘在佇列中等待),而佇列中所有的微任務都會被處理

事件迴圈細節:

注意事件處理函式發生頻率以及執行耗時。如滑鼠移動事件(mouse-move)將導致大量事件進入佇列,其中執行的任何複雜操作都可能導致卡頓甚至無響應

如果微任務佇列中含有微任務,不論隊伍中等待的其他任務,微任務都將獲得優先執行權,即在當前正在執行的任務執行完成後立即執行

在兩個巨集任務之間,可以重新渲染頁面,而在微任務執行之前不允許重新渲染頁面,即只有當微任務隊列為空時,事件迴圈才會重新渲染頁面

方法

格式描述

settimeout

id = settimeout(fn, delay)

啟動乙個計時器,

在指定的延遲時間結束時

執行一次**函式,

返回標識計時器的唯一值

cleartimeout

cleartimeout(id)

當指定的計時器尚未觸發時,

取消(消除)計時器

setinterval

id = setinterval(fn, delay)

啟動乙個計時器,

按照指定的間隔時間

不斷執行**函式直至取消,

返回標識計時器的唯一值

clearinterval

clearinterval(id)

取消(消除)指定的計時器

大部分瀏覽器都允許使用cleartimeout或clearinterval清除任意型別的計時器,但建議使用與之相對應的清除方法

settimeout(function repeat() , 10);

setinterval(() => , 10);

以上兩段**看起來功能一致,但實際上,settimeout內的**在前乙個**函式執行完成後,至少還會延遲10ms執行,而setinterval會嘗試每10ms執行**函式,不關心前乙個**函式是否執行

使用計時器來中斷乙個長時間執行的任務

使用計時器將長時間執行的任務分解為多個不會阻塞事件迴圈的小人物,這允許在任務之間進行重新渲染,而不會阻塞ui

按鈕

預設時事件冒泡,第三個引數傳入false,採用事件冒泡,傳入true採用事件捕獲

在上級元素上**事件

abc

abcabc

abc

start

downloading...

大家來學VIM(乙個歷久彌新的編輯器) 一

因為最近在學vim,所以轉過來。裡面是繁體,好多都是台灣的計算機術語,看的時候有點怪異,不過還是不影響閱讀的。前言 鑑於仍有許多人還沒找到順手的編輯器,而許多想學 vi 的人又覺得無從下手,因此在此提出一些個人的心得,希望能對這些朋友有點幫助。或許也減少一點 faq 吧!真要深入的話,大多數的前輩都...

大家來學VIM(乙個歷久彌新的編輯器) 四

yank 是什麼意思?有疑問的請查一下字典吧!就好像是中醫治療中的 拔罐 的意思啦 是不是叫 拔罐 知道的朋友指正一下吧 反正在 vi m 中,她就是複製 copy 的意思。這在 vi m 的思考邏輯裡,就是 拔 yank 起來,放 put 上去。其實複製的指令就是 y 乙個而已,為什麼要獨立成乙個...

大家來學VIM(乙個歷久彌新的編輯器) 八

shell命令 外部指令 執行外部指令。當然您的指令要在 path 內。執行前一次執行之外部指令。在這裡的 可不是強迫中止喔!vim 中有乙個很特殊的指令 是重複前一次的冒號命令。sh ell 執行 shell。使用 exit 回來。這在 vim gui 會在原視窗內顯示執行結果,在 elvis g...