diff --git a/src/renderer/src/AixPPTist/src/api/classcourse.ts b/src/renderer/src/AixPPTist/src/api/classcourse.ts index 30e65e8..f15b0af 100644 --- a/src/renderer/src/AixPPTist/src/api/classcourse.ts +++ b/src/renderer/src/AixPPTist/src/api/classcourse.ts @@ -7,11 +7,14 @@ import { sessionStore } from '@/utils/store' // electron-store 状态管理 import * as useStore from '../store' // pptist-状态管理 import ChatWs from '@/plugins/socket' // 聊天socket import msgUtils from '@/plugins/modal' // 消息工具 +import * as Fullscreen from '../utils/fullscreen' // 全屏 +import useExecPlay from '../views/Screen/hooks/useExecPlay' // 播放控制 const slidesStore = useStore.useSlidesStore() // 幻灯片-状态管理 const screenStore = useStore.useScreenStore() // 全屏-状态管理 const classcourseStore = useStore.useClasscourseStore() // 课堂信息-状态管理 const classcourse = sessionStore.get('curr.classcourse') // 课堂信息 +const execPlay = useExecPlay() // 播放控制 export class Classcourse { msgObj:ElMessageBox = null // 提示消息对象 @@ -27,7 +30,9 @@ export class Classcourse { load() { console.log('classcourse-load', classcourse) // 打开全屏 - screenStore.setScreening(!!classcourse) + const isCourse = !!classcourse + if (isCourse) Fullscreen.enterFullscreen() + screenStore.setScreening(isCourse) // 如果课堂信息有值,则连接socket if (!!classcourse) { // 连接socket @@ -36,8 +41,15 @@ export class Classcourse { this.classcourse = classcourse // 课堂信息 this.id = classcourse.id // 课堂id // 如果课堂信息有paging,则更新当前页码 - const isPaging = !!classcourse.paging||classcourse.paging==0 + const isPaging = !!classcourse.paging if (isPaging) slidesStore.updateSlideIndex(classcourse.paging) + // 如果课堂信息有paging,则更新动画播放状态 + const isAnim = !!classcourse.cartoonTimes + if (isAnim) { // 动画播放 + for (let i = 0; i <= classcourse.cartoonTimes; i++) { + execPlay.runAnimation(true) // 异步执行动画 + } + } // 课堂信息-状态管理 classcourseStore.setClasscourse(classcourse) // 待上课提示 diff --git a/src/renderer/src/AixPPTist/src/api/watcher.ts b/src/renderer/src/AixPPTist/src/api/watcher.ts index aee4d48..f555f3d 100644 --- a/src/renderer/src/AixPPTist/src/api/watcher.ts +++ b/src/renderer/src/AixPPTist/src/api/watcher.ts @@ -12,6 +12,7 @@ import Classcourse from './classcourse' // 课程相关 import msgUtils from '@/plugins/modal' // 消息工具 import { Homework } from './index' // api-作业相关 import emitter from '@/utils/mitt' //mitt 事件总线 +import useExecPlay from '../views/Screen/hooks/useExecPlay' // 播放控制 /** * @description 监听器 @@ -21,6 +22,7 @@ export default () => { const classcourseStore = store.useClasscourseStore() // 课堂信息-状态管理 const resource = sessionStore.get('curr.resource') // apt 资源 const smarttalk = sessionStore.get('curr.smarttalk') // 备课资源 + const execPlay = useExecPlay() // 播放控制 // 监听幻灯片内容变化 watch(() => slidesStore.slides, (newVal, oldVal) => { @@ -82,8 +84,11 @@ export default () => { } break case MsgEnum.HEADS.MSG_slideFlapping: // 幻灯片翻页 - const slideIndex = content.current - slidesStore.updateSlideIndex(slideIndex) // 更新幻灯片下标 + const slideIndex = content?.current || 0 + const type = content?.animation + if (type === 'Nextsteps') execPlay.execNext() // 下一步 + else if (type === 'Previoustep') execPlay.execPrev() // 上一步 + else slidesStore.updateSlideIndex(slideIndex) // 更新幻灯片下标 break case MsgEnum.HEADS.MSG_homework: // 作业|活动-布置 if (!content.classWorkId) return diff --git a/src/renderer/src/AixPPTist/src/views/Screen/hooks/useExecPlay.ts b/src/renderer/src/AixPPTist/src/views/Screen/hooks/useExecPlay.ts index f002995..8ec0233 100644 --- a/src/renderer/src/AixPPTist/src/views/Screen/hooks/useExecPlay.ts +++ b/src/renderer/src/AixPPTist/src/views/Screen/hooks/useExecPlay.ts @@ -19,10 +19,10 @@ export default () => { // 最小已播放页面索引 const playedSlidesMinIndex = ref(slideIndex.value) - // 执行元素动画 - const runAnimation = () => { + // 执行元素动画 isAsync 为 true 时,异步执行,否则同步执行 + const runAnimation = (isAsync: boolean) => { // 正在执行动画时,禁止其他新的动画开始 - if (inAnimation.value) return + if (inAnimation.value && !isAsync) return const { animations, autoNext } = formatedAnimations.value[animationIndex.value] animationIndex.value += 1 @@ -69,7 +69,7 @@ export default () => { elRef.addEventListener('animationend', handleAnimationEnd, { once: true }) } } - + onMounted(() => { const firstAnimations = formatedAnimations.value[0] if (firstAnimations && firstAnimations.animations.length) { @@ -174,6 +174,7 @@ export default () => { // 鼠标滚动翻页 const mousewheelListener = throttle(function(e: WheelEvent) { + e.preventDefault() // 阻止默认事件 if (e.deltaY < 0) execPrev() else if (e.deltaY > 0) execNext() }, 500, { leading: true, trailing: false }) @@ -182,20 +183,20 @@ export default () => { const touchInfo = ref<{ x: number; y: number; } | null>(null) const touchStartListener = (e: TouchEvent) => { + e.preventDefault() // 阻止默认事件 touchInfo.value = { - x: e.changedTouches[0].pageX, - y: e.changedTouches[0].pageY, + // x: e.changedTouches[0].pageX, + // y: e.changedTouches[0].pageY, + x: e.changedTouches[0].clientX, + y: e.changedTouches[0].clientY, } } const touchEndListener = (e: TouchEvent) => { if (!touchInfo.value) return - - const offsetX = Math.abs(touchInfo.value.x - e.changedTouches[0].pageX) - const offsetY = e.changedTouches[0].pageY - touchInfo.value.y - + const offsetX = Math.abs(touchInfo.value.x - e.changedTouches[0].clientX) + const offsetY = e.changedTouches[0].clientY - touchInfo.value.y if ( Math.abs(offsetY) > offsetX && Math.abs(offsetY) > 50 ) { touchInfo.value = null - if (offsetY > 0) execPrev() else execNext() } @@ -203,6 +204,7 @@ export default () => { // 快捷键翻页 const keydownListener = (e: KeyboardEvent) => { + e.preventDefault() // 阻止默认事件 const key = e.key.toUpperCase() if (key === KEYS.UP || key === KEYS.LEFT || key === KEYS.PAGEUP) execPrev()