说明:
功能描述
本文档将介绍如何在互动课堂 SDK 的白板区域集成自定义的多层级视图(如代码编辑器、文档预览等),并通过自定义的侧边 Tab 实现层级切换。
演示效果如下图所示(左侧切换器与中间多层级区域)。请注意,该区域的 UI 均支持自定义,您需要自行开发 UI 组件传入。因此下图样式仅供参考。


说明:
核心机制
我们提供插槽机制,允许开发者通过以下两个状态注入自定义 UI:
TStateCustomLayers:定义除默认白板外的其他自定义层级(Layer)。通过数组形式指定并管理多个层级。TStateLayerSwitcherTab:定义显示在白板左侧工具栏的切换器组件(Tab)。开发者可以通过调用 activateLayer 方法来控制不同层级的显示与隐藏(课堂会自动管理层级堆叠顺序)。注意事项
1. 样式隔离与背景色
自定义层级组件(如
my-code-editor)必须设置背景色(如 background: #fff),否则会透出下方的白板内容,造成视觉重叠。自定义层级组件(如
my-code-editor)必须配置高度及宽度为 100%,以确保占满提供的 Dom 节点挂载区域。2. 组件注册时机
请确保在执行
setState 配置之前,customElements.define 已经执行完毕,否则 SDK 渲染时可能无法识别组件标签。3. 生命周期管理
层级切换本质上是 CSS
z-index 的变化。Vue 组件不会被销毁,其内部状态(如编辑器中的代码内容)会保持。开发步骤
步骤一:开发自定义组件
为了确保组件样式的独立性并避免框架版本冲突,推荐使用 Vue 3 的
defineCustomElement 将业务组件封装为标准 Web Component。1. 定义若干个业务层级组件 (例如:CodeEditorElement.ce.vue)
<!-- src/CodeEditorElement.ce.vue --><template><div class="code-editor-layer"><div class="toolbar">代码编辑器模式</div><textarea class="editor-area" placeholder="在此输入代码...">console.log('Hello World');</textarea></div></template><script setup>// 组件逻辑...</script><style>.code-editor-layer {width: 100%;height: 100%; /* 务必占满容器 */background: #1e1e1e; /* 务必设置背景色,防止透出下方白板 */display: flex;flex-direction: column;}/* ...其他样式 */</style>
2. 定义切换器组件 (例如:LayerSwitcherComponent.ce.vue)
切换器负责调用 SDK API 切换视图。
<!-- src/LayerSwitcherComponent.ce.vue --><template><div class="layer-switcher"><button @click="switchLayer('whiteboard')">白板</button><button @click="switchLayer('code-editor')">代码</button></div></template><script setup>/*** 切换层级方法* @param {string} layerId - 目标层级ID ('whiteboard' 为默认内嵌白板组件)*/const switchLayer = (layerId) => {TCIC.SDK.instance.getComponent('board-component').getVueInstance().activateLayer(layerId);};</script>
步骤二:注册 Web Component
在项目入口文件(如
main.js)中,将上述组件注册为浏览器可识别的 Custom Elements。import { defineCustomElement } from 'vue';import CodeEditorElement from './CodeEditorElement.ce.vue';import LayerSwitcherComponent from './LayerSwitcherComponent.ce.vue';// 1. 注册代码编辑器组件// 注册名为 'my-code-editor'customElements.define('my-code-editor', defineCustomElement(CodeEditorElement, { shadowRoot: false }));// 2. 注册切换器组件// 注册名为 'my-layer-switcher'customElements.define('my-layer-switcher', defineCustomElement(LayerSwitcherComponent, { shadowRoot: false }));
步骤三:配置 SDK 状态
步骤二组件注册完成后,通过
setState 将注册好的组件标签名注入到课堂前端项目中。// 获取 SDK 实例const sdkInstance = TCIC.SDK.instance;// 1. 配置自定义层级列表// 请注意, id 请不要占用我们内嵌默认白板的 "whiteboard"const customLayersConfig = [{id: 'code-editor', // 层级唯一标识 (Layer ID),用于 activateLayer 调用component: 'my-code-editor' // 上一步注册的 Web Component 标签名}// 可配置多个...];// 注入自定义层级配置sdkInstance.setState('TStateCustomLayers', customLayersConfig);// 2. 注入侧边切换 Tab 组件sdkInstance.setState('TStateLayerSwitcherTab', 'my-layer-switcher');
API 参考
方法:activateLayer(layerId)
切换当前激活的层级。SDK 会自动处理层级的
z-index(激活层级置顶)。参数:
layerId :String 类型。'whiteboard':固定值,代表默认的互动白板层级。自定义 ID:对应
TStateCustomLayers 配置中的 id(例如 'code-editor')。返回:
Boolean (执行是否成功)示例:
const boardInstance = TCIC.SDK.instance.getComponent('board-component').getVueInstance();// 切换到代码编辑器boardInstance.activateLayer('code-editor');// 切换回白板boardInstance.activateLayer('whiteboard');