import EventEmitter from 'eventemitter3'; import { ApplicationInstanceType, ForgeWindow } from '@netless/forge-room'; import { ForgeSlidePermissionFlag, ForgeSlidePermissions } from './ForgeSlidePermession'; export interface SlideEvents { /** * 当用户权限变更时触发 * @param { string } userId 对应 userId * @param { ForgeSlidePermissionFlag[] } flags 当前权限列表 * @param { number } value 权限值 */ permissionChange: (userId: string, flags: ForgeSlidePermissionFlag[], value: number) => void; /** * 开始渲染页面时触发 * @param {number} pageIndex 页面索引 */ renderStart: (pageIndex: number) => void; /** * 页面渲染完成时触发 * @param {number} pageIndex 页面索引 */ renderEnd: (pageIndex: number) => void; /** * 主序列动画完成时触发 * @param {number} animateIndex 主动画索引 */ mainSeqStepEnd: (animateIndex: number) => void; /** * 主序列动画开始时触发 * @param {number} animateIndex 主动画索引 */ mainSeqStepStart: (animateIndex: number) => void; } export class SlideForge extends EventEmitter implements ApplicationInstanceType { public readonly view!: HTMLDivElement; public readonly permissions!: ForgeSlidePermissions; public readonly footView!: HTMLDivElement; public readonly sideBarView!: HTMLDivElement; public readonly window: ForgeWindow | undefined = undefined; /** * 当前页面索引, 从 0 开始 */ public readonly pageIndex!: number; /** * 总页数 */ public readonly pageCount!: number; /** * 切换到参数指定页面, index 从 0 开始 * @param {number} index 页面索引 */ public goto!: (index: number) => void; /** * 下一步, 如果已经是本页的最后一步, 则切换到下一页 */ public nextStep!: () => void; /** * 上一步, 如果已经是本页的第一步, 则切换到上一页 */ public prevStep!: () => void; /** * 下一页, 如果是最后一页, 则不执行任何操作 */ public nextPage!: () => void; /** * 上一页, 如果是第一页, 则不执行任何操作 */ public prevPage!: () => void; /** * 切换侧栏显示状态 */ public sideBarToggle!: () => void; /** * 获取预览图图片内容, base64 编码 * @param {number} index 页面索引 */ public imgContent!: (index: number) => Promise; /** * 获取预览图图片链接 * @param {number} index 页面索引 */ public imgUrl!: (index: number) => Promise; /** * 获取预览图图片尺寸 * @param {number} index 页面索引 */ public imgSize!: (index: number) => Promise<{width: number, height: number}>; /** * 冻结当前幻灯片, 释放资源 * @param {() => void} [callback] 冻结完成回调 */ public frozen!: (callback?: () => void) => void; /** * 解冻冻结的幻灯片, 重新获取资源 * @param {() => void} [callback] 解冻完成回调 */ public release!: (callback?: () => void) => void; }