事件
工作區上的每個更改都會觸發一個事件。這些事件充分描述了每個更改的前後狀態。
監聽事件
工作區具有addChangeListener
和removeChangeListener
方法,可用於偵聽事件流。一個示例是 實時生成代碼。另一個示例是 最大塊限制演示。通常,這兩個示例都不關心觸發事件是什麼。他們只是查看工作區的當前狀態。
一個更復雜的事件偵聽器將查看觸發事件。下面的示例檢測用戶何時創建其第一條評論,發出警報,然後停止收聽,以便不再觸發其他警報。
function onFirstComment(event) {
if (event.type == Blockly.Events.CHANGE &&
event.element == 'comment' &&
!event.oldValue && event.newValue) {
alert('Congratulations on creating your first comment!')
workspace.removeChangeListener(onFirstComment);
}
}
workspace.addChangeListener(onFirstComment);
塊有另一種監聽事件流的方法。塊可以定義一個 onchange 函數,只要該塊的工作區發生更改,該函數就會被調用。
活動類型
所有事件共享以下公共屬性。
名稱 | 類型 | 描述 |
---|---|---|
type |
string | Blockly.Events.CREATE,Blockly.Events.DELETE,Blockly.Events.CHANGE,Blockly.Events.MOVE,Blockly.Events.UI。 |
workspaceId |
string | UUID of workspace. The workspace can be found with Blockly.Workspace.getById(event.workspaceId) |
blockId |
string | UUID of block. The block can be found with workspace.getBlockById(event.blockId) |
group |
string | UUID of group. Some events are part of an indivisible group, such as inserting a statement in a stack. |
Blockly.Events.BLOCK_CREATE
塊創建事件具有兩個附加屬性。
名稱 | 類型 | 描述 |
---|---|---|
xml |
object | 定義新塊和任何連接的子塊的XML樹。 |
ids |
array | 包含新塊和任何連接的子塊的UUID的數組。 |
Blockly.Events.BLOCK_DELETE
塊刪除事件具有兩個附加屬性。
名稱 | 類型 | 描述 |
---|---|---|
oldXml |
object | 定義刪除的塊和任何連接的子塊的XML樹。 |
ids |
array | 包含已刪除塊和任何連接的子塊的UUID的數組。 |
Blockly.Events.BLOCK_CHANGE
塊更改事件具有四個附加屬性。
名稱 | 類型 | 描述 |
---|---|---|
element |
string | 'field', 'comment', 'collapsed', 'disabled', 'inline', 'mutate' |
name |
string | 字段名稱(如果這是對字段的更改)。 |
oldValue |
value | 原始值。 |
newValue |
value | 更改值。 |
Blockly.Events.BLOCK_MOVE
塊移動事件具有六個附加屬性。
名稱 | 類型 | 描述 |
---|---|---|
oldParentId |
string | 舊父塊的UUID。如果是頂級塊,則未定義。 |
oldInputName |
string | 舊的輸入名稱。如果是頂級塊或父級的下一個塊,則未定義。 |
oldCoordinate |
object | X和Y座標(如果它是頂級塊)。如果有父級,則未定義。 |
newParentId |
string | 新父塊的UUID。如果是頂級塊,則未定義。 |
newInputName |
string | 新父項的輸入名稱。如果是頂級塊或父級的下一個塊,則未定義。 |
newCoordinate |
object | X和Y座標(如果它是頂級塊)。如果有父級,則未定義。 |
Blockly.Events.VAR_CREATE
變量創建事件具有兩個附加屬性。
名稱 | 類型 | 描述 |
---|---|---|
varType |
string | 變量的類型,例如“ int”或“ string”。不需要唯一。這將默認爲“”,這是一種特定類型。 |
varName |
string | 變量的名稱。這在變量和過程中是唯一的。 |
varId |
string | 變量的唯一ID。 |
Blockly.Events.VAR_DELETE
變量刪除事件具有兩個附加屬性。
名稱 | 類型 | 描述 |
---|---|---|
varType |
string | 變量的類型,例如“ int”或“ string”。不需要唯一。這將默認爲“”,這是一種特定類型。 |
varName |
string | 變量的名稱。這在變量和過程中是唯一的。 |
varId |
string | 變量的唯一ID。 |
Blockly.Events.VAR_RENAME
變量重命名事件具有兩個附加屬性。
名稱 | 類型 | 描述 |
---|---|---|
oldName |
string | 變量的當前名稱。這在變量和過程中是唯一的。 |
newName |
string | 變量的新名稱。這在變量和過程中是唯一的。 |
varId |
string | 變量的唯一ID。 |
Blockly.Events.UI
UI事件具有三個附加屬性。
名稱 | 類型 | 描述 |
---|---|---|
element |
string | 'selected', 'category', 'click', 'commentOpen', 'mutatorOpen', 'warningOpen', 'theme' |
oldValue |
value | 原始值。 |
newValue |
value | 更改值。 |
可以預期,隨着時間的流逝,由UI事件表示的UI動作列表將變得更加全面。例如scrolling, zooming, dragging bubbles, etc等事件。
這是 使用事件在兩個Blockly實例之間進行同步的實時演示。