blockly > WorkspaceSvg

คลาส WorkspaceSvg

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

ลายเซ็น:

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

ขยายการทำงาน: Workspace

ใช้: IContextMenu, IFocusableNode, IFocusableTree

ผู้ผลิต

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

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

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

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

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

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

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

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

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

scrollY ตัวเลข

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

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

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

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

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

ดังนั้น หาก 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()

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

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

getAllBlocks(ordered) ค้นหาบล็อกทั้งหมดในพื้นที่ทำงาน คุณจัดเรียงบล็อกตามตำแหน่งได้ โดยจัดเรียงจากบนลงล่าง (โดยเอียงไปทาง LTR หรือ RTL เล็กน้อย)
getAudioManager() รับเครื่องมือจัดการเสียงสำหรับพื้นที่ทำงานนี้
getBlockById(id) ค้นหาบล็อกในพื้นที่ทํางานนี้ซึ่งมีรหัสที่ระบุ
getBlocksBoundingBox() คำนวณกล่องขอบเขตของบล็อกในพื้นที่ทํางาน ระบบพิกัด: พิกัดของพื้นที่ทำงาน
getBubbleCanvas() รับองค์ประกอบ SVG ที่สร้างพื้นผิวของฟองสบู่
getButtonCallback(key) รับฟังก์ชัน Callback ที่เชื่อมโยงกับคีย์ที่ระบุสําหรับการคลิกปุ่มและป้ายกำกับในเมนูแบบเลื่อนลง
getCanvas() รับองค์ประกอบ SVG ที่สร้างพื้นผิวการวาด
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) รับฟังก์ชัน Callback ที่เชื่อมโยงกับคีย์ที่ระบุสำหรับการสร้างหมวดหมู่กล่องเครื่องมือที่กำหนดเองในพื้นที่ทำงานนี้
getTopBlocks(ordered) ค้นหาบล็อกระดับบนสุดและแสดงผล คุณจัดเรียงบล็อกตามตำแหน่งได้ โดยจัดเรียงจากบนลงล่าง (โดยเอียงไปทาง LTR หรือ RTL เล็กน้อย)
getTopBoundedElements() ค้นหาองค์ประกอบที่ขอบเขตระดับบนสุดและแสดงผล
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) ลงทะเบียนฟังก์ชัน Callback ที่เชื่อมโยงกับคีย์ที่ระบุสำหรับการคลิกปุ่มและป้ายกำกับในเมนูแบบเลื่อนลง เช่น ปุ่มที่ระบุโดย 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) บันทึกข้อมูลตัวแฮนเดิลการปรับขนาดเพื่อให้เราลบข้อมูลดังกล่าวได้ในภายหลัง
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() ซูมบล็อกให้พอดีกับพื้นที่ทำงาน หากเป็นไปได้