blockly > WorkspaceSvg

WorkspaceSvg 类

用于工作区的类。屏幕上的这个区域包含可选的垃圾桶、滚动条、气泡和拖动功能。

Signature:

export declare class WorkspaceSvg extends Workspace implements IASTNodeLocationSvg 

扩展Workspace

实现IASTNodeLocationSvg

构造函数

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

属性

媒体资源 修饰符 类型 说明
configureContextMenu ((menuOptions: ContextMenuOption[], e: Event) => void) | null 开发者可以定义此函数,将自定义菜单选项添加到工作区的上下文菜单中,或修改工作区创建的一组菜单选项。
keyboardAccessibilityMode boolean 如果已开启键盘无障碍模式,则为 true,否则为 false。
已呈现 boolean SVG 工作区的渲染状态。对于无头工作区,返回 false;对于 WorkspaceSvg 实例,返回 true。
缩放 number 当前比例。
滚动条 ScrollbarPair | null 此工作区的滚动条(如果存在)。
scrollX number

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

设想一下视图,以及在该视图下方移动的画布会很有帮助。随着画布向右移动,该值会变成正数,视图现在可以看到画布的左侧。随着画布向左移动,该值会变成负值,视图现在可以看到画布的右侧。

令人困惑的一点是,该值不包含,并且不得包含 absoluteLeft 偏移。这是因为它用于计算 viewLeft 值。

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

启用工作区后,viewLeft 和工作区原点位于相同的 X 位置。当画布在视图下方向右侧滑动时,此值 (scrollX) 变得更加正,而 viewLeft 相对于工作区原点变得更加负(假设画布上的原点随着画布移动而向右滑动)。

因此,如果 scrollX 包含 absoluteLeft,这将以某种方式“取消偏移”工作区原点。这意味着 viewLeft 表示 blocklyDiv 的左边缘,而非工作区的左边缘。

scrollY number

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

设想一下视图,以及在该视图下方移动的画布会很有帮助。随着画布向下移动,该值会变成正数,视图现在可以看到画布的上半部分。随着画布向上移动,该值会变成负值,视图将“看到”画布的下半部分。

这个值令人困惑的是,该值不包含且不得包含 absoluteTop 偏移。这是因为它用于计算 viewTop 值。

viewTop 以工作区原点为参照物(但以像素为单位)。工作区原点位于工作区的左上角(至少在启用状态下)。它会从 blocklyDiv 的左上角偏移,以免位于工具箱下方。

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

因此,如果 scrollY 包含 absoluteTop,这会以某种方式“平移”工作区原点。这意味着,viewTop 表示 blocklyDiv 的上边缘,而不是工作区的上边缘。

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

方法

方法 修饰符 说明
addTopBlock(block) 向热门代码块列表添加一个代码块。
addTopBoundedElement(element) 将有边界元素添加到上边界元素列表中。
addTopComment(comment) 向热门评论列表添加评论。
centerOnBlock(id, blockOnly) 滚动工作区,以给定代码块的中心为中心。如果代码块下方还堆叠了其他代码块,除非 blockOnly 为 true,否则工作区会以堆栈为中心。
cleanUp() 对一列中的所有代码块进行排序,以清理工作区。
clear() 处置了工作区中的所有块,并进行优化以防止调整大小。
createDom(opt_backgroundClass, injectDiv) 创建工作区 DOM 元素。
createVariable(name, opt_type, opt_id) 创建一个具有指定名称的新变量。更新浮出控件以立即显示新变量。
deleteVariableById(id) 按传入的 ID 删除变量。更新浮出控件,以立即显示变量已删除。
dispose() 处置此工作区。请解除与所有 DOM 元素的关联,以防止内存泄漏。
getAllBlocks(ordered) 在工作区中查找所有砌块。块可以选择按位置排序;从上到下排序(有轻微的 LTR 或 RTL 偏差)。
getAudioManager() 获取此工作区的音频管理器。
getBlockById(id) 在此工作区中找到具有指定 ID 的块。
getBlocksBoundingBox() 计算工作区上的块的边界框。坐标系:工作区坐标。
getBubbleCanvas() 获取形成气泡表面的 SVG 元素。
getButtonCallback(key) 针对弹出中的按钮和标签的点击,获取与指定键相关联的回调函数。
getCanvas() 获取构成绘图表面的 SVG 元素。
getComponentManager() 获取此工作区的组件管理器。
getCursor() 此工作区的光标。
getDragTarget(e) 返回指针事件所在的拖动目标。
getFlyout(opt_own) 与此工作区关联的浮出控件的 getter。此浮出控件可能归工具箱或工作区所有,具体取决于工具箱配置。如果没有飞出按钮,该值将为 null。
getGrid() 获取此工作区的网格对象;如果没有网格对象,则为 null。
getInverseScreenCTM() 反色屏幕 CTM 的 getter。
getMarkerManager() 获取此工作区的标记管理器。
getMetricsManager() 获取此工作区的指标管理器。
getParentSvg() 获取包含此工作区的 SVG 元素。注意:我们假定仅当工作区已注入 DOM 后才会调用此方法。
getRenderer() 将块渲染程序连接到此工作区。
getRootWorkspace()
getScale() 获取工作区的缩放比例。如果工作区有父级,我们将调用父级,以获取工作区比例。
getSvgGroup() 返回工作区的 SVG 组。
getTheme() 获取工作区主题对象。
getToolbox() 与此工作区关联的工具箱的 getter(如果存在)。
getToolboxCategoryCallback(key) 获取与指定键相关联的回调函数,用于填充此工作区中的自定义工具箱类别。
getTopBlocks(ordered) 查找顶级代码块并将其返回。块可以选择按位置排序;从上到下排序(有轻微的 LTR 或 RTL 偏差)。
getTopBoundedElements() 查找顶级有边界元素并返回它们。
getWidth() 返回工作区的水平偏移量。适用于 XML 中的 LTR/RTL 兼容性。
hideChaff(onlyClosePopups) 关闭提示、上下文菜单、下拉菜单选项等。
hideComponents(onlyClosePopups) 隐藏所有可自动隐藏的组件(例如飞出、垃圾桶和所有用户注册的组件)。
highlightBlock(id, opt_state) 在工作区中突出显示或取消突出显示某个块。块突出显示通常用于直观地标记当前正在执行的块。
isDraggable() 此工作区可拖动吗?
isDragging() 用户当前是否拖动区块或滚动浮出控件/工作区?
isMovable()

此工作区可以移动吗?

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

isMovableHorizontally() 此工作区是否可以水平移动?
isMovableVertically() 此工作区可垂直移动吗?
isVisible() isVisible 的 getter
markFocused() 将此工作区标记为当前焦点所在的主工作区。
moveDrag(e) 跟踪此工作区中对象的拖动情况。
newBlock(prototypeName, opt_id) 获取新创建的代码块。
粘贴(状态) 将提供的块或工作区注释粘贴到工作区中。不会检查对象是否还有剩余容量,应在调用此方法之前完成。
recordDragTargets() 列出此工作区的所有删除区域。
refreshTheme() 更新主题后,刷新工作区中的所有砌块。
registerButtonCallback(key, func) 针对弹出中的按钮和标签的点击,注册与指定键相关联的回调函数。例如,XML 指定的按钮应该通过调用 registerButtonCallback("CREATE_VARIABLE", yourCallbackFunction) 进行匹配。
registerToolboxCategoryCallback(key, func) 注册与给定键关联的回调函数,用于填充此工作区中的自定义工具箱类别。有关示例,请查看变量和过程类别。
removeButtonCallback(key) 移除对弹出中按钮点击的回调。
removeToolboxCategoryCallback(key) 移除了对工具箱中自定义类别名称的点击的回调。
removeTopBlock(block) 从顶部块列表中移除某个块。
removeTopBoundedElement(element) 从上边界元素列表中移除有边界元素。
removeTopComment(comment) 从热门评论列表中移除评论。
renameVariableById(id, newName) 通过更新变量映射中变量的名称来重命名变量。更新浮出控件以立即显示重命名的变量。
渲染 在工作区中渲染所有块。
resize() 调整所有工作区 Chrome(工具箱、回收站、滚动条等)的大小和位置当某些更改需要重新计算回收站的尺寸和位置、缩放、工具箱等(例如调整窗口大小)时,应调用此方法。
scrollCenter() 将工作区居中。
setResizeHandlerWrapper(handler) 请保存大小调整处理程序数据,以便我们稍后将其删除。
setResizesEnabled(enabled) 更新此工作区是否启用大小调整功能。启用后,工作区将适时调整大小。如果停用,工作区在重新启用之前不会调整大小。用于避免在批量操作期间调整大小,以提升性能。
setScale(newScale) 设置工作区的缩放比例。
setTheme(theme) 设置工作区主题对象。如果未传递主题,则默认使用 Classic 主题。
setVisible(isVisible) 切换工作区的可见性。目前仅适用于主工作区。
startDrag(e, xy) 开始跟踪此工作区中对象的拖动。
translate(x, y) 将此工作区转换为新坐标。
updateInverseScreenCTM() 将反向屏幕 CTM 标记为脏。
updateToolbox(toolboxDef) 修改现有工具箱中的块树。
zoom(x, y, 数量) 以给定 (x, y) 坐标为中心或相对于指定 (x, y) 坐标缩放工作区。
zoomCenter(type) 通过放大或缩小,以视图中心为中心来缩放块。
zoomToFit() 如果可能,请缩放各图块,使其适合工作区。