WorkspaceSvg 类
工作区的类。这是一个屏幕区域,其中包含可选的回收站、滚动条、气泡和拖动功能。
Signature:
export declare class WorkspaceSvg extends Workspace implements IContextMenu, IFocusableNode, IFocusableTree
扩展对象: 工作区
实现: IContextMenu、IFocusableNode、IFocusableTree
构造函数
构造函数 | 修饰符 | 说明 |
---|---|---|
(构造函数)(选项) | 构造 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() | 尽可能缩放块,使其适合工作区。 |