lsc 6 days ago
parent
commit
a42ba62b3f

+ 3 - 3
src/views/Student/index.vue

@@ -1088,11 +1088,11 @@ const currentSlideHasIframe = computed(() => {
   return elementList.value.some(element => element.type === ElementTypes.FRAME)
   return elementList.value.some(element => element.type === ElementTypes.FRAME)
 })
 })
 
 
-// 当前幻灯片的所有 iframe 是否都已 isDone(含非 type=73,非 type=73 的 elementDone 跑完即设 true)
+// 当前幻灯片的所有 iframe 是否都已 isDone 且 frameloading 已结束
 const currentSlideIframeReady = computed(() => {
 const currentSlideIframeReady = computed(() => {
   const frames = elementList.value.filter(element => element.type === ElementTypes.FRAME)
   const frames = elementList.value.filter(element => element.type === ElementTypes.FRAME)
-  if (frames.length === 0) return true // 没 iframe 视为 ready
-  return frames.every(frame => frame.isDone === true)
+  if (frames.length === 0) return true
+  return frames.every(frame => frame.isDone === true && (frame as any).iframeLoading !== true)
 })
 })
 
 
 const currentSlideToolType = computed(() => {
 const currentSlideToolType = computed(() => {

+ 2 - 2
src/views/Student/index2.vue

@@ -1082,11 +1082,11 @@ const currentSlideHasIframe = computed(() => {
   return elementList.value.some(element => element.type === ElementTypes.FRAME)
   return elementList.value.some(element => element.type === ElementTypes.FRAME)
 })
 })
 
 
-// 当前幻灯片的所有 iframe 是否都已 isDone
+// 当前幻灯片的所有 iframe 是否都已 isDone 且 frameloading 已结束
 const currentSlideIframeReady = computed(() => {
 const currentSlideIframeReady = computed(() => {
   const frames = elementList.value.filter(element => element.type === ElementTypes.FRAME)
   const frames = elementList.value.filter(element => element.type === ElementTypes.FRAME)
   if (frames.length === 0) return true
   if (frames.length === 0) return true
-  return frames.every(frame => frame.isDone === true)
+  return frames.every(frame => frame.isDone === true && (frame as any).iframeLoading !== true)
 })
 })
 
 
 const currentSlideToolType = computed(() => {
 const currentSlideToolType = computed(() => {

+ 5 - 0
src/views/components/element/FrameElement/BaseFrameElement.vue

@@ -309,6 +309,11 @@ const getTypeLabel = (type: number): string => {
 
 
 const frameloading = ref(false)
 const frameloading = ref(false)
 
 
+// 把 frameloading 同步到 slidesStore 元素数据,父页面(Student)可汇总判断 iframe 是否全部 ready
+watch(frameloading, (val) => {
+  slidesStore.updateElement({ id: props.elementInfo.id, props: { iframeLoading: val } })
+})
+
 // toolType=74 视频播放时:释放其他所有 video 的 src → 自己挂 src → play
 // toolType=74 视频播放时:释放其他所有 video 的 src → 自己挂 src → play
 const onVideoPlay = () => {
 const onVideoPlay = () => {
   const video = video74Ref.value
   const video = video74Ref.value