ppt播放 已经翻页异常情况

This commit is contained in:
zdg 2024-12-13 13:17:18 +08:00
parent 645f9ab120
commit 29888b0674
3 changed files with 30 additions and 14 deletions

View File

@ -8,11 +8,13 @@ import * as useStore from '../store' // pptist-状态管理
import ChatWs from '@/plugins/socket' // 聊天socket import ChatWs from '@/plugins/socket' // 聊天socket
import msgUtils from '@/plugins/modal' // 消息工具 import msgUtils from '@/plugins/modal' // 消息工具
import * as Fullscreen from '../utils/fullscreen' // 全屏 import * as Fullscreen from '../utils/fullscreen' // 全屏
import useExecPlay from '../views/Screen/hooks/useExecPlay' // 播放控制
const slidesStore = useStore.useSlidesStore() // 幻灯片-状态管理 const slidesStore = useStore.useSlidesStore() // 幻灯片-状态管理
const screenStore = useStore.useScreenStore() // 全屏-状态管理 const screenStore = useStore.useScreenStore() // 全屏-状态管理
const classcourseStore = useStore.useClasscourseStore() // 课堂信息-状态管理 const classcourseStore = useStore.useClasscourseStore() // 课堂信息-状态管理
const classcourse = sessionStore.get('curr.classcourse') // 课堂信息 const classcourse = sessionStore.get('curr.classcourse') // 课堂信息
const execPlay = useExecPlay() // 播放控制
export class Classcourse { export class Classcourse {
msgObj:ElMessageBox = null // 提示消息对象 msgObj:ElMessageBox = null // 提示消息对象
@ -39,8 +41,15 @@ export class Classcourse {
this.classcourse = classcourse // 课堂信息 this.classcourse = classcourse // 课堂信息
this.id = classcourse.id // 课堂id this.id = classcourse.id // 课堂id
// 如果课堂信息有paging则更新当前页码 // 如果课堂信息有paging则更新当前页码
const isPaging = !!classcourse.paging||classcourse.paging==0 const isPaging = !!classcourse.paging
if (isPaging) slidesStore.updateSlideIndex(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) classcourseStore.setClasscourse(classcourse)
// 待上课提示 // 待上课提示

View File

@ -12,6 +12,7 @@ import Classcourse from './classcourse' // 课程相关
import msgUtils from '@/plugins/modal' // 消息工具 import msgUtils from '@/plugins/modal' // 消息工具
import { Homework } from './index' // api-作业相关 import { Homework } from './index' // api-作业相关
import emitter from '@/utils/mitt' //mitt 事件总线 import emitter from '@/utils/mitt' //mitt 事件总线
import useExecPlay from '../views/Screen/hooks/useExecPlay' // 播放控制
/** /**
* @description * @description
@ -21,6 +22,7 @@ export default () => {
const classcourseStore = store.useClasscourseStore() // 课堂信息-状态管理 const classcourseStore = store.useClasscourseStore() // 课堂信息-状态管理
const resource = sessionStore.get('curr.resource') // apt 资源 const resource = sessionStore.get('curr.resource') // apt 资源
const smarttalk = sessionStore.get('curr.smarttalk') // 备课资源 const smarttalk = sessionStore.get('curr.smarttalk') // 备课资源
const execPlay = useExecPlay() // 播放控制
// 监听幻灯片内容变化 // 监听幻灯片内容变化
watch(() => slidesStore.slides, (newVal, oldVal) => { watch(() => slidesStore.slides, (newVal, oldVal) => {
@ -82,8 +84,11 @@ export default () => {
} }
break break
case MsgEnum.HEADS.MSG_slideFlapping: // 幻灯片翻页 case MsgEnum.HEADS.MSG_slideFlapping: // 幻灯片翻页
const slideIndex = content.current const slideIndex = content?.current || 0
slidesStore.updateSlideIndex(slideIndex) // 更新幻灯片下标 const type = content?.animation
if (type === 'Nextsteps') execPlay.execNext() // 下一步
else if (type === 'Previoustep') execPlay.execPrev() // 上一步
else slidesStore.updateSlideIndex(slideIndex) // 更新幻灯片下标
break break
case MsgEnum.HEADS.MSG_homework: // 作业|活动-布置 case MsgEnum.HEADS.MSG_homework: // 作业|活动-布置
if (!content.classWorkId) return if (!content.classWorkId) return

View File

@ -19,10 +19,10 @@ export default () => {
// 最小已播放页面索引 // 最小已播放页面索引
const playedSlidesMinIndex = ref(slideIndex.value) const playedSlidesMinIndex = ref(slideIndex.value)
// 执行元素动画 // 执行元素动画 isAsync 为 true 时,异步执行,否则同步执行
const runAnimation = () => { const runAnimation = (isAsync: boolean) => {
// 正在执行动画时,禁止其他新的动画开始 // 正在执行动画时,禁止其他新的动画开始
if (inAnimation.value) return if (inAnimation.value && !isAsync) return
const { animations, autoNext } = formatedAnimations.value[animationIndex.value] const { animations, autoNext } = formatedAnimations.value[animationIndex.value]
animationIndex.value += 1 animationIndex.value += 1
@ -69,7 +69,7 @@ export default () => {
elRef.addEventListener('animationend', handleAnimationEnd, { once: true }) elRef.addEventListener('animationend', handleAnimationEnd, { once: true })
} }
} }
onMounted(() => { onMounted(() => {
const firstAnimations = formatedAnimations.value[0] const firstAnimations = formatedAnimations.value[0]
if (firstAnimations && firstAnimations.animations.length) { if (firstAnimations && firstAnimations.animations.length) {
@ -174,6 +174,7 @@ export default () => {
// 鼠标滚动翻页 // 鼠标滚动翻页
const mousewheelListener = throttle(function(e: WheelEvent) { const mousewheelListener = throttle(function(e: WheelEvent) {
e.preventDefault() // 阻止默认事件
if (e.deltaY < 0) execPrev() if (e.deltaY < 0) execPrev()
else if (e.deltaY > 0) execNext() else if (e.deltaY > 0) execNext()
}, 500, { leading: true, trailing: false }) }, 500, { leading: true, trailing: false })
@ -182,20 +183,20 @@ export default () => {
const touchInfo = ref<{ x: number; y: number; } | null>(null) const touchInfo = ref<{ x: number; y: number; } | null>(null)
const touchStartListener = (e: TouchEvent) => { const touchStartListener = (e: TouchEvent) => {
e.preventDefault() // 阻止默认事件
touchInfo.value = { touchInfo.value = {
x: e.changedTouches[0].pageX, // x: e.changedTouches[0].pageX,
y: e.changedTouches[0].pageY, // y: e.changedTouches[0].pageY,
x: e.changedTouches[0].clientX,
y: e.changedTouches[0].clientY,
} }
} }
const touchEndListener = (e: TouchEvent) => { const touchEndListener = (e: TouchEvent) => {
if (!touchInfo.value) return if (!touchInfo.value) return
const offsetX = Math.abs(touchInfo.value.x - e.changedTouches[0].clientX)
const offsetX = Math.abs(touchInfo.value.x - e.changedTouches[0].pageX) const offsetY = e.changedTouches[0].clientY - touchInfo.value.y
const offsetY = e.changedTouches[0].pageY - touchInfo.value.y
if ( Math.abs(offsetY) > offsetX && Math.abs(offsetY) > 50 ) { if ( Math.abs(offsetY) > offsetX && Math.abs(offsetY) > 50 ) {
touchInfo.value = null touchInfo.value = null
if (offsetY > 0) execPrev() if (offsetY > 0) execPrev()
else execNext() else execNext()
} }
@ -203,6 +204,7 @@ export default () => {
// 快捷键翻页 // 快捷键翻页
const keydownListener = (e: KeyboardEvent) => { const keydownListener = (e: KeyboardEvent) => {
e.preventDefault() // 阻止默认事件
const key = e.key.toUpperCase() const key = e.key.toUpperCase()
if (key === KEYS.UP || key === KEYS.LEFT || key === KEYS.PAGEUP) execPrev() if (key === KEYS.UP || key === KEYS.LEFT || key === KEYS.PAGEUP) execPrev()