blockly > WorkspaceSvg

คลาส WorkspaceSvg

ชั้นเรียนสำหรับพื้นที่ทำงาน ซึ่งเป็นพื้นที่บนหน้าจอที่มีถังขยะ แถบเลื่อน บับเบิล และการลาก (ไม่บังคับ)

ลายเซ็น:

export declare class WorkspaceSvg extends Workspace implements IContextMenu, IFocusableNode, IFocusableTree 

ขยาย: Workspace

Implements: IContextMenu, IFocusableNode, IFocusableTree

ผู้ผลิต

ผู้ผลิต คีย์ตัวปรับแต่ง คำอธิบาย
(ตัวสร้าง)(ตัวเลือก) สร้างอินสแตนซ์ใหม่ของคลาส WorkspaceSvg

พร็อพเพอร์ตี้

พร็อพเพอร์ตี้ คีย์ตัวปรับแต่ง ประเภท คำอธิบาย
configureContextMenu ((menuOptions: ContextMenuOption[], e: Event) => void) | null นักพัฒนาซอฟต์แวร์สามารถกำหนดฟังก์ชันนี้เพื่อเพิ่มตัวเลือกเมนูที่กำหนดเองลงในเมนูตามบริบทของพื้นที่ทำงาน หรือแก้ไขชุดตัวเลือกเมนูที่พื้นที่ทำงานสร้างขึ้น
keyboardAccessibilityMode บูลีน เป็นจริงหากโหมดการช่วยเหลือพิเศษของแป้นพิมพ์เปิดอยู่ หรือเป็นเท็จ
keyboardMoveInProgress บูลีน เป็นจริงหากมีการย้ายที่เริ่มต้นด้วยแป้นพิมพ์ ("ลาก")
rendered บูลีน สถานะการแสดงผลของพื้นที่ทำงาน SVG แสดงผล false สำหรับพื้นที่ทำงานแบบไม่มีส่วนหัวและแสดงผลเป็นจริงสำหรับอินสแตนซ์ของ WorkspaceSvg
scale ตัวเลข ขนาดปัจจุบัน
แถบเลื่อน ScrollbarPair | null แถบเลื่อนของพื้นที่ทำงานนี้ หากมี
scrollX ตัวเลข

ออฟเซ็ตการเลื่อนแนวนอนปัจจุบันในหน่วยพิกเซล ซึ่งสัมพันธ์กับจุดเริ่มต้นของพื้นที่ทำงาน

การนึกถึงวิวและ Canvas ที่เคลื่อนไหวภายใต้วิวนั้นจะเป็นประโยชน์ เมื่อ Canvas เคลื่อนที่ไปทางขวา ค่านี้จะกลายเป็นค่าบวกมากขึ้น และตอนนี้มุมมองจะ "เห็น" ด้านซ้ายของ Canvas เมื่อ Canvas เลื่อนไปทางซ้าย ค่านี้จะติดลบมากขึ้น และตอนนี้มุมมองจะ "เห็น" ด้านขวาของ Canvas

สิ่งที่ทำให้ค่านี้สับสนคือค่านี้ไม่มีและต้องไม่มีออฟเซ็ต absoluteLeft เนื่องจากใช้ในการคำนวณค่า viewLeft

viewLeft จะสัมพันธ์กับจุดเริ่มต้นของพื้นที่ทำงาน (แม้ว่าจะอยู่ในหน่วยพิกเซล) จุดเริ่มต้นของพื้นที่ทำงานคือมุมซ้ายบนของพื้นที่ทำงาน (อย่างน้อยเมื่อเปิดใช้) โดยจะเลื่อนจากด้านซ้ายบนของ blocklyDiv เพื่อไม่ให้อยู่ใต้กล่องเครื่องมือ

เมื่อเปิดใช้พื้นที่ทํางานแล้ว viewLeft และต้นทางของพื้นที่ทํางานจะอยู่ที่ตําแหน่ง X เดียวกัน เมื่อ Canvas เลื่อนไปทางขวาใต้มุมมอง ค่านี้ (scrollX) จะเป็นบวกมากขึ้น และ viewLeft จะเป็นลบมากขึ้นเมื่อเทียบกับจุดเริ่มต้นของพื้นที่ทำงาน (ลองนึกภาพจุดเริ่มต้นของพื้นที่ทำงานเป็นจุดบน Canvas ที่เลื่อนไปทางขวาเมื่อ Canvas เคลื่อนที่)

ดังนั้นหาก scrollX รวม absoluteLeft ไว้ด้วย ก็จะเป็นการ "unshift" ต้นทางของพื้นที่ทำงานในทางหนึ่ง ซึ่งหมายความว่า viewLeft จะแสดงขอบด้านซ้ายของ blocklyDiv แทนที่จะเป็นขอบด้านซ้ายของพื้นที่ทำงาน

scrollY ตัวเลข

ออฟเซ็ตการเลื่อนแนวตั้งปัจจุบันในหน่วยพิกเซล ซึ่งสัมพันธ์กับจุดเริ่มต้นของพื้นที่ทำงาน

การนึกถึงวิวและ Canvas ที่เคลื่อนไหวภายใต้วิวนั้นจะเป็นประโยชน์ เมื่อ Canvas เลื่อนลง ค่านี้จะกลายเป็นค่าบวกมากขึ้น และตอนนี้มุมมองจะ "เห็น" ส่วนบนของ Canvas เมื่อ Canvas เลื่อนขึ้น ค่านี้จะติดลบมากขึ้น และมุมมองจะ "เห็น" ส่วนล่างของ Canvas

สิ่งที่ทำให้ค่านี้สับสนคือค่านี้ไม่รวมและต้องไม่รวมออฟเซ็ต absoluteTop เนื่องจากใช้ในการคำนวณค่า viewTop

โดย viewTop จะสัมพันธ์กับต้นทางของพื้นที่ทํางาน (แม้ว่าจะเป็นหน่วยพิกเซลก็ตาม) จุดเริ่มต้นของพื้นที่ทำงานคือมุมซ้ายบนของพื้นที่ทำงาน (อย่างน้อยเมื่อเปิดใช้) โดยจะเลื่อนจากด้านซ้ายบนของ blocklyDiv เพื่อไม่ให้อยู่ใต้กล่องเครื่องมือ

เมื่อเปิดใช้พื้นที่ทํางานแล้ว ต้นทางของ viewTop และพื้นที่ทํางานจะอยู่ที่ตำแหน่ง Y เดียวกัน เมื่อ Canvas เลื่อนลงมาด้านล่าง ค่านี้ (scrollY) จะเป็นบวกมากขึ้น และ viewTop จะเป็นลบมากขึ้นเมื่อเทียบกับต้นทางของพื้นที่ทำงาน (รูปภาพในต้นทางของพื้นที่ทำงานเป็นจุดบน Canvas ที่เลื่อนลงมาเมื่อ Canvas เคลื่อนที่)

ดังนั้นหาก scrollY รวม absoluteTop ไว้ด้วย ก็จะเป็นการ "unshift" ต้นทางของพื้นที่ทำงานในลักษณะหนึ่ง ซึ่งหมายความว่า viewTop จะแสดงขอบด้านบนของ blocklyDiv แทนที่จะเป็นขอบด้านบนของพื้นที่ทำงาน

startScrollX ตัวเลข ค่าการเลื่อนแนวนอนเมื่อเริ่มเลื่อนในหน่วยพิกเซล
startScrollY ตัวเลข ค่าการเลื่อนแนวตั้งเมื่อเริ่มเลื่อนในหน่วยพิกเซล
svgBackground_ SVGElement
svgBlockCanvas_ SVGElement
svgBubbleCanvas_ SVGElement
svgGroup_ SVGElement
themeManager_ protected ThemeManager
trashcan ถังขยะ | null ถังขยะของพื้นที่ทำงาน (หากมี)
zoomControls_ ZoomControls | null

เมธอด

วิธีการ คีย์ตัวปรับแต่ง คำอธิบาย
addClass(className) เพิ่มคลาส CSS ลงในพื้นที่ทำงาน
addTopBlock(block) เพิ่มบล็อกไปยังรายการบล็อกยอดนิยม
addTopBoundedElement(element) เพิ่มองค์ประกอบที่จำกัดลงในรายการองค์ประกอบที่จำกัดยอดนิยม
addTopComment(comment) เพิ่มความคิดเห็นลงในรายการความคิดเห็นยอดนิยม
canBeFocused() ดู IFocusableNode.canBeFocused
centerOnBlock(id, blockOnly) เลื่อนพื้นที่ทำงานเพื่อจัดกึ่งกลางบล็อกที่ระบุ หากบล็อกมีบล็อกอื่นๆ ซ้อนอยู่ด้านล่าง พื้นที่ทำงานจะอยู่ตรงกลางของสแต็ก เว้นแต่ blockOnly จะเป็นจริง
cleanUp() จัดระเบียบพื้นที่ทำงานโดยเรียงบล็อกทั้งหมดในคอลัมน์เพื่อให้ไม่มีบล็อกใดซ้อนทับกัน
clear() ทิ้งบล็อกทั้งหมดในพื้นที่ทำงาน พร้อมการเพิ่มประสิทธิภาพเพื่อป้องกันการปรับขนาด
copyOptionsForFlyout() สร้างชุดตัวเลือกใหม่จากตัวเลือกของพื้นที่ทำงานนี้โดยใช้เฉพาะค่าที่เกี่ยวข้องกับเมนูแบบเลื่อนลง
createDom(opt_backgroundClass, injectionDiv) สร้างองค์ประกอบ DOM ของพื้นที่ทำงาน
dispose() ทิ้งพื้นที่ทำงานนี้ ยกเลิกการลิงก์จากองค์ประกอบ DOM ทั้งหมดเพื่อป้องกันหน่วยความจำรั่ว
getAbsoluteScale()

แสดงผลขนาดสัมบูรณ์ของพื้นที่ทำงาน

การปรับขนาด Workspace เป็นแบบทวีคูณ หาก Workspace B (เช่น เอดิเตอร์ Mutator) ที่มีขนาด Y ซ้อนอยู่ภายใน Workspace รูท A ที่มีขนาด X ขนาดที่มีผลของ Workspace B จะเป็น X * Y เนื่องจากในฐานะที่เป็น Workspace ย่อยของ A Workspace B จะได้รับการแปลงตามปัจจัยการปรับขนาดของ A อยู่แล้ว จากนั้นจะแปลงตัวเองเพิ่มเติมตามปัจจัยการปรับขนาดของตัวเอง โดยปกติแล้วการดำเนินการนี้จะทำงานได้เลย แต่สำหรับองค์ประกอบส่วนกลาง (เช่น เอดิเตอร์ฟิลด์) ที่เชื่อมโยงกับพื้นที่ทำงานหนึ่งๆ ในเชิงภาพ แต่จะอยู่ที่ระดับบนสุดของ DOM แทนที่จะเป็นองค์ประกอบย่อยของพื้นที่ทำงานที่เชื่อมโยงกัน อาจต้องใช้การปรับขนาดแบบสัมบูรณ์/แบบมีผลเพื่อให้แสดงผลได้อย่างเหมาะสม

getAllBlocks(ordered) ค้นหาบล็อกทั้งหมดในพื้นที่ทำงาน คุณเลือกจัดเรียงบล็อกตามตำแหน่งได้ โดยเรียงจากบนลงล่าง (มีอคติเล็กน้อยจากซ้ายไปขวาหรือขวาไปซ้าย)
getAudioManager() รับเครื่องมือจัดการเสียงสำหรับพื้นที่ทำงานนี้
getBlockById(id) ค้นหาบล็อกในพื้นที่ทำงานนี้ที่มีรหัสที่ระบุ
getBlocksBoundingBox() คำนวณกรอบล้อมรอบสำหรับบล็อกในพื้นที่ทำงาน ระบบพิกัด: พิกัดพื้นที่ทำงาน
getBubbleCanvas() รับองค์ประกอบ SVG ที่สร้างพื้นผิวของฟอง
getButtonCallback(key) รับฟังก์ชันเรียกกลับที่เชื่อมโยงกับคีย์ที่ระบุสำหรับการคลิกปุ่มและป้ายกำกับในเมนูแบบลอย
getCanvas() รับองค์ประกอบ SVG ที่สร้างพื้นผิวการวาด
getCommentById(id) แสดงความคิดเห็นในพื้นที่ทำงานที่มีรหัสที่ระบุ หากมี
getComponentManager() รับเครื่องมือจัดการคอมโพเนนต์สำหรับพื้นที่ทำงานนี้
getCursor() เคอร์เซอร์สำหรับพื้นที่ทำงานนี้
getDragTarget(e) แสดงเป้าหมายการลากที่เหตุการณ์ของเคอร์เซอร์อยู่เหนือ
getFlyout(opt_own) Getter สำหรับเมนูแบบลอยที่เชื่อมโยงกับพื้นที่ทำงานนี้ ฟลายเอาต์นี้อาจเป็นของกล่องเครื่องมือหรือพื้นที่ทำงานก็ได้ ขึ้นอยู่กับการกำหนดค่ากล่องเครื่องมือ โดยจะเป็นค่าว่างหากไม่มีฟลายเอาต์
getFocusableElement() ดู IFocusableNode.getFocusableElement
getFocusableTree() ดู IFocusableNode.getFocusableTree
getGrid() รับออบเจ็กต์ตารางกริดสำหรับพื้นที่ทำงานนี้ หรือ Null หากไม่มี
getInverseScreenCTM() Getter สำหรับ CTM ของหน้าจอที่กลับด้าน
getMarkerManager() รับเครื่องมือจัดการเครื่องหมายสำหรับพื้นที่ทำงานนี้
getMetricsManager() รับตัวจัดการเมตริกสำหรับพื้นที่ทำงานนี้
getNavigator() แสดงออบเจ็กต์ที่รับผิดชอบในการประสานงานการเคลื่อนที่ของโฟกัสระหว่างรายการต่างๆ ในพื้นที่ทำงานนี้เพื่อตอบสนองต่อคำสั่งการไปยังส่วนต่างๆ ด้วยแป้นพิมพ์
getNestedTrees() ดู IFocusableTree.getNestedTrees
getParentSvg() รับองค์ประกอบ SVG ที่มีพื้นที่ทำงานนี้ หมายเหตุ: เราถือว่าฟังก์ชันนี้จะเรียกใช้หลังจากแทรกพื้นที่ทำงานลงใน DOM แล้วเท่านั้น
getRenderer() รับเครื่องมือแสดงผลบล็อกที่แนบมากับพื้นที่ทำงานนี้
getRestoredFocusableNode(previousNode) ดู IFocusableTree.getRestoredFocusableNode
getRootFocusableNode() ดู IFocusableTree.getRootFocusableNode
getRootWorkspace()
getScale() รับปัจจัยการซูมของพื้นที่ทำงาน
getSvgGroup() แสดงผลกลุ่ม SVG สำหรับพื้นที่ทำงาน
getTheme() รับออบเจ็กต์ธีมพื้นที่ทำงาน
getToolbox() Getter สำหรับกล่องเครื่องมือที่เชื่อมโยงกับพื้นที่ทำงานนี้ หากมี
getToolboxCategoryCallback(key) รับฟังก์ชันเรียกกลับที่เชื่อมโยงกับคีย์ที่ระบุเพื่อสร้างหมวดหมู่กล่องเครื่องมือที่กำหนดเองในพื้นที่ทำงานนี้
getTopBlocks(ordered) ค้นหาบล็อกระดับบนสุดและแสดงผล คุณเลือกจัดเรียงบล็อกตามตำแหน่งได้ โดยเรียงจากบนลงล่าง (มีอคติเล็กน้อยจากซ้ายไปขวาหรือขวาไปซ้าย)
getTopBoundedElements(ordered) ค้นหาองค์ประกอบระดับบนสุดที่ล้อมรอบและแสดงผล
getTopComments(ordered) แสดงรายการความคิดเห็นในพื้นที่ทำงานนี้
getWidth() แสดงออฟเซ็ตแนวนอนของพื้นที่ทำงาน มีไว้สำหรับความเข้ากันได้ของ LTR/RTL ใน XML
hideChaff(onlyClosePopups) ปิดเคล็ดลับเครื่องมือ เมนูตามบริบท ตัวเลือกแบบเลื่อนลง ฯลฯ
hideComponents(onlyClosePopups) ซ่อนคอมโพเนนต์ที่ซ่อนอัตโนมัติได้ (เช่น เมนูแบบลอย ถังขยะ และคอมโพเนนต์ที่ผู้ใช้ลงทะเบียน)
highlightBlock(id, opt_state) ไฮไลต์หรือยกเลิกการไฮไลต์บล็อกในพื้นที่ทำงาน โดยมักใช้การไฮไลต์บล็อกเพื่อทำเครื่องหมายบล็อกที่กำลังดำเนินการอยู่ด้วยภาพ
isDraggable() พื้นที่ทำงานนี้ลากได้ไหม
isDragging()

แสดงค่าเป็นจริงก็ต่อเมื่อผู้ใช้กำลังใช้ท่าทางสัมผัสการลาก หรือหากมีการย้ายที่เริ่มต้นด้วยแป้นพิมพ์

ท่าทางสัมผัสการลากมักจะเกี่ยวข้องกับการย้ายบล็อกหรือรายการอื่นๆ ในพื้นที่ทำงาน หรือการเลื่อนเมนูแบบลอย/พื้นที่ทำงาน

การเคลื่อนไหวที่เริ่มต้นด้วยแป้นพิมพ์จะใช้โครงสร้างพื้นฐานการลากและมีจุดประสงค์เพื่อจำลอง (ชุดย่อยของ) ท่าทางสัมผัสการลาก ดังนั้นโดยทั่วไปจึงควรได้รับการปฏิบัติราวกับว่าเป็นการลากตามท่าทางสัมผัส

isMovable()

พื้นที่ทำงานนี้เคลื่อนย้ายได้ไหม

ซึ่งหมายความว่าผู้ใช้สามารถเปลี่ยนตำแหน่งพิกัด X Y ของพื้นที่ทำงานผ่านอินพุตได้ ซึ่งอาจทำได้ผ่านแถบเลื่อน ล้อเลื่อน การลาก หรือการซูมด้วยล้อเลื่อนหรือการบีบนิ้ว (เนื่องจากการซูมจะอยู่ตรงกลางตำแหน่งของเมาส์) ซึ่งไม่รวมการซูมด้วยตัวควบคุมการซูมเนื่องจากระบบจะกำหนดพิกัด X Y โดยอัตโนมัติ

isMovableHorizontally() พื้นที่ทำงานนี้เลื่อนในแนวนอนได้ไหม
isMovableVertically() พื้นที่ทำงานนี้เลื่อนในแนวตั้งได้ไหม
isVisible() Getter สำหรับ isVisible
lookUpFocusableNode(id) ดู IFocusableTree.lookUpFocusableNode
markFocused() ทำเครื่องหมายพื้นที่ทำงานนี้เป็นพื้นที่ทำงานหลักที่ใช้งานอยู่ในปัจจุบัน
moveDrag(e) ติดตามการลากออบเจ็กต์ในพื้นที่ทำงานนี้
newBlock(prototypeName, opt_id) รับบล็อกที่สร้างขึ้นใหม่
newComment(id) รับความคิดเห็นที่สร้างขึ้นใหม่
onNodeBlur() ดู IFocusableNode.onNodeBlur
onNodeFocus() ดู IFocusableNode.onNodeFocus
onTreeBlur(nextTree) ดู IFocusableTree.onTreeBlur
onTreeFocus(_node, _previousTree) ดู IFocusableTree.onTreeFocus
recordDragTargets() ทำรายการพื้นที่ที่ต้องลบทั้งหมดสำหรับพื้นที่ทำงานนี้
refreshTheme() รีเฟรชบล็อกทั้งหมดในพื้นที่ทำงานหลังจากอัปเดตธีม
registerButtonCallback(key, func) ลงทะเบียนฟังก์ชันเรียกกลับที่เชื่อมโยงกับคีย์ที่ระบุสำหรับการคลิกปุ่มและป้ายกำกับในเมนูแบบลอย ตัวอย่างเช่น ปุ่มที่ระบุโดย XML ควรจับคู่กับการเรียกใช้ registerButtonCallback("CREATE_VARIABLE", yourCallbackFunction)
registerToolboxCategoryCallback(key, func) ลงทะเบียนฟังก์ชันเรียกกลับที่เชื่อมโยงกับคีย์ที่ระบุเพื่อสร้างหมวดหมู่กล่องเครื่องมือที่กำหนดเองในพื้นที่ทำงานนี้ ดูหมวดหมู่ตัวแปรและขั้นตอนเป็นตัวอย่าง
removeButtonCallback(key) นำการเรียกกลับสำหรับการคลิกปุ่มในเมนูแบบลอยออก
removeClass(className) นำคลาส CSS ออกจากพื้นที่ทำงาน
removeToolboxCategoryCallback(key) นำการเรียกกลับสำหรับการคลิกชื่อหมวดหมู่ที่กำหนดเองในกล่องเครื่องมือออก
removeTopBlock(block) นำบล็อกออกจากรายการบล็อกยอดนิยม
removeTopBoundedElement(element) นำองค์ประกอบที่ล้อมรอบออกจากรายการองค์ประกอบที่ล้อมรอบยอดนิยม
removeTopComment(comment) นำความคิดเห็นออกจากรายการความคิดเห็นยอดนิยม
render() แสดงบล็อกทั้งหมดในพื้นที่ทำงาน
resize() ปรับขนาดและเปลี่ยนตำแหน่ง Chrome ของพื้นที่ทำงานทั้งหมด (กล่องเครื่องมือ ถังขยะ แถบเลื่อน ฯลฯ) ควรเรียกใช้ฟังก์ชันนี้เมื่อมีการเปลี่ยนแปลงที่ต้องคำนวณขนาดและตำแหน่งของถังขยะ ซูม กล่องเครื่องมือ ฯลฯ ใหม่ (เช่น การปรับขนาดหน้าต่าง)
scroll(x, y) เลื่อนพื้นที่ทำงานไปยังออฟเซ็ตที่ระบุ (เป็นพิกเซล) โดยให้อยู่ในขอบเขตของพื้นที่ทำงาน ดูความคิดเห็นเกี่ยวกับ workspaceSvg.scrollX เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับความหมายของค่าเหล่านี้
scrollCenter() จัดกึ่งกลางพื้นที่ทำงาน
setIsReadOnly(readOnly)
setNavigator(newNavigator) ตั้งค่าอินสแตนซ์ Navigator ที่ใช้โดยพื้นที่ทำงานนี้
setResizeHandlerWrapper(handler) บันทึกข้อมูลแฮนเดิลการปรับขนาดเพื่อให้เราลบได้ในภายหลังใน dispose
setResizesEnabled(enabled) อัปเดตว่าพื้นที่ทำงานนี้เปิดใช้การปรับขนาดหรือไม่ หากเปิดใช้ พื้นที่ทำงานจะปรับขนาดเมื่อเหมาะสม หากปิดใช้ไว้ พื้นที่ทำงานจะไม่ปรับขนาดจนกว่าจะเปิดใช้อีกครั้ง ใช้เพื่อหลีกเลี่ยงการปรับขนาดระหว่างการดำเนินการเป็นกลุ่มเพื่อประสิทธิภาพ
setScale(newScale) ตั้งค่าปัจจัยการซูมของพื้นที่ทำงาน
setTheme(theme) ตั้งค่าออบเจ็กต์ธีมของพื้นที่ทำงาน หากไม่ได้ส่งธีม ระบบจะใช้ธีม Classic เป็นค่าเริ่มต้น
setVisible(isVisible) เปิด/ปิดการแสดงพื้นที่ทำงาน ปัจจุบันมีไว้สำหรับพื้นที่ทำงานหลักเท่านั้น
startDrag(e, xy) เริ่มติดตามการลากออบเจ็กต์ในพื้นที่ทำงานนี้
translate(x, y) แปลพื้นที่ทำงานนี้เป็นพิกัดใหม่
updateInverseScreenCTM() ทำเครื่องหมาย CTM ของหน้าจอที่กลับด้านว่าไม่ถูกต้อง
updateToolbox(toolboxDef) แก้ไขโครงสร้างบล็อกในกล่องเครื่องมือที่มีอยู่
zoom(x, y, amount) ซูมเข้าหรือออกในพื้นที่ทำงานโดยอิงตาม/กึ่งกลางพิกัด (x, y) ที่ระบุ
zoomCenter(type) ซูมบล็อกที่อยู่ตรงกลางของมุมมองด้วยการซูมเข้าหรือออก
zoomToFit() ซูมบล็อกให้พอดีกับพื้นที่ทำงานหากเป็นไปได้