blockly > WorkspaceSvg

WorkspaceSvg 类

工作区的类。这是一个屏幕区域,其中包含可选的回收站、滚动条、气泡和拖动功能。

Signature:

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

扩展对象工作区

实现IContextMenuIFocusableNodeIFocusableTree

构造函数

构造函数 修饰符 说明
(构造函数)(选项) 构造 WorkspaceSvg 类的新实例

属性

属性 修饰符 类型 说明
configureContextMenu ((menuOptions: ContextMenuOption[], e: Event) => void) | null 开发者可以定义此函数,以便向工作区的上下文菜单添加自定义菜单选项,或修改工作区创建的菜单选项集。
keyboardAccessibilityMode 布尔值 如果键盘无障碍模式处于开启状态,则为 true,否则为 false。
keyboardMoveInProgress 布尔值 当键盘发起的移动(“拖动”)正在进行时,返回 true。
rendered 布尔值 SVG 工作区的渲染状态。对于无头工作区,返回 false;对于 WorkspaceSvg 的实例,返回 true。
规模 数值 当前缩放比例。
滚动条 ScrollbarPair | null 工作区的滚动条(如果有)。
scrollX 数值

当前以像素为单位的水平滚动偏移量,相对于工作区原点。

将视图想象成位于画布上方的图层,有助于理解。随着画布向右移动,此值会变得更大,视图现在“看到”的是画布的左侧。随着画布向左移动,此值会变得更负,并且视图现在“看到”了画布的右侧。

此值的令人困惑之处在于,它不包含且不得包含 absoluteLeft 偏移量。这是因为该值用于计算 viewLeft 值。

viewLeft 相对于工作区原点(以像素为单位)。工作区原点是工作区的左上角(至少在启用时是这样)。它从 blocklyDiv 的左上角偏移,以免位于工具箱下方。

启用工作区后,viewLeft 和工作区原点位于同一 X 位置。当画布在视图下方朝右滑动时,此值 (scrollX) 会变得越来越正,而 viewLeft 相对于工作区原点会变得越来越负(将工作区原点想象成画布上的一个点,当画布移动时,该点会向右滑动)。

因此,如果 scrollX 包含 absoluteLeft,则会在某种程度上“取消偏移”工作区原点。这意味着 viewLeft 将表示 blocklyDiv 的左边缘,而不是工作区的左边缘。

scrollY 数值

当前垂直滚动偏移量(以像素为单位),相对于工作区原点。

将视图想象成位于画布上方的图层,有助于理解。随着画布向下移动,此值会变得越来越正,视图现在“看到”了画布的上部。随着画布向上移动,此值会变得更负,视图会“看到”画布的下半部分。

此值令人困惑之处在于,它不包含且不得包含 absoluteTop 偏移量。这是因为该值用于计算 viewTop 值。

viewTop 相对于工作区原点(以像素为单位)。工作区原点是工作区的左上角(至少在启用时是这样)。它从 blocklyDiv 的左上角偏移,以免位于工具箱下方。

启用工作区后,viewTop 和工作区原点位于同一 Y 位置。当画布向底部滑动时,此值 (scrollY) 会变得更大,而 viewTop 相对于工作区原点(工作区原点处的图片在画布上显示为一个点,随着画布移动而向下滑动)会变得更小。

因此,如果 scrollY 包含 absoluteTop,则会在某种程度上“取消偏移”工作区原点。这意味着 viewTop 将表示 blocklyDiv 的上边缘,而不是工作区的上边缘。

startScrollX 数值 开始滚动时的水平滚动值(以像素为单位)。
startScrollY 数值 开始滚动时的垂直滚动值(以像素为单位)。
svgBackground_ SVGElement
svgBlockCanvas_ SVGElement
svgBubbleCanvas_ SVGElement
svgGroup_ SVGElement
themeManager_ protected ThemeManager
回收站 垃圾桶 | null 工作区的回收站(如有)。
zoomControls_ ZoomControls | null

方法

方法 修饰符 说明
addClass(className) 向工作区添加 CSS 类。
addTopBlock(block) 向热门板块列表添加板块。
addTopBoundedElement(element) 将有界元素添加到顶部有界元素的列表中。
addTopComment(comment) 向热门评论列表添加评论。
canBeFocused() 请参阅 IFocusableNode.canBeFocused。
centerOnBlock(id, blockOnly) 滚动工作区,使指定块居中显示。如果该代码块下方堆叠了其他代码块,工作区将以该堆叠为中心,除非 blockOnly 为 true。
cleanUp() 通过对列中的所有块进行排序,使它们互不重叠,从而清理工作区。
clear() 处置工作区中的所有块,并进行优化以防止调整大小。
copyOptionsForFlyout() 根据此工作区的选项创建一组新选项,其中仅包含与弹出式菜单相关的值。
createDom(opt_backgroundClass, injectionDiv) 创建工作区 DOM 元素。
dispose() 处置此工作区。从所有 DOM 元素取消关联,以防止内存泄漏。
getAbsoluteScale()

返回工作区的绝对缩放比例。

工作区缩放是乘法;如果缩放比例为 Y 的工作区 B(例如变异器编辑器)嵌套在缩放比例为 X 的根工作区 A 中,则工作区 B 的有效缩放比例为 X * Y,因为作为 A 的子工作区,它已经过 A 的缩放比例转换,然后又通过自身的缩放比例进一步转换。通常情况下,这会正常运行,但对于在视觉上与特定工作区相关联但位于 DOM 顶层而不是其关联工作区的子级的全局元素(例如字段编辑器),可能需要绝对/有效缩放比例才能正确渲染。

getAllBlocks(ordered) 查找工作区中的所有块。块可选择按位置排序;从上到下(略微偏向 LTR 或 RTL)。
getAudioManager() 获取相应工作区的音频管理器。
getBlockById(id) 查找此工作区中具有指定 ID 的块。
getBlocksBoundingBox() 计算工作区中各个块的边界框。坐标系:工作区坐标。
getBubbleCanvas() 获取构成气泡表面的 SVG 元素。
getButtonCallback(key) 获取与指定键相关联的回调函数,用于处理弹出式菜单中按钮和标签的点击。
getCanvas() 获取构成绘图表面的 SVG 元素。
getCommentById(id) 返回具有指定 ID 的工作区注释(如果有)。
getComponentManager() 获取相应工作区的组件管理器。
getCursor() 相应工作区的光标。
getDragTarget(e) 返回指针事件所指向的拖动目标。
getFlyout(opt_own) 与此工作区关联的弹出式菜单的 getter。此弹出式菜单可能归工具箱或工作区所有,具体取决于工具箱配置。如果没有弹出式菜单,则为 null。
getFocusableElement() 请参阅 IFocusableNode.getFocusableElement。
getFocusableTree() 请参阅 IFocusableNode.getFocusableTree。
getGrid() 获取相应工作区的网格对象,如果没有,则返回 null。
getInverseScreenCTM() 反转屏幕 CTM 的 getter。
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) 查找顶级块并返回这些块。块可选择按位置排序;从上到下(略微偏向 LTR 或 RTL)。
getTopBoundedElements(ordered) 查找顶级有界元素并返回这些元素。
getTopComments(ordered) 返回相应工作区中的评论列表。
getWidth() 返回工作区的水平偏移量。旨在实现 XML 中的 LTR/RTL 兼容性。
hideChaff(onlyClosePopups) 关闭提示、上下文菜单、下拉选择项等。
hideComponents(onlyClosePopups) 隐藏所有可自动隐藏的组件(例如弹出式菜单、回收站和任何用户注册的组件)。
highlightBlock(id, opt_state) 突出显示或取消突出显示工作区中的代码块。代码块突出显示功能通常用于直观地标记当前正在执行的代码块。
isDraggable() 此工作区是否可拖动?
isDragging()

当用户当前正在执行拖动操作或键盘发起的移动操作正在进行时,返回 true。

拖动操作通常包括在工作区中移动代码块或其他项,或滚动弹出式菜单/工作区。

键盘发起的移动是使用拖动基础架构实现的,旨在模拟(部分)拖动手势,因此通常应将其视为基于手势的拖动。

isMovable()

此工作区是否可移动?

这意味着用户可以通过输入来调整工作区的 X Y 坐标。这可以通过滚动条、滚轮、拖动或通过使用滚轮或双指张合手势进行缩放来实现(因为缩放以鼠标位置为中心)。这不包括使用缩放控件进行缩放,因为 X Y 坐标是通过编程方式确定的。

isMovableHorizontally() 此工作区是否可水平移动?
isMovableVertically() 此工作区是否可垂直移动?
isVisible() isVisible 的 getter
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) 保存调整大小处理程序数据,以便稍后在处置中将其删除。
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() 尽可能缩放块,使其适合工作区。