Преглед изворни кода

fix(ScreenSlide): 修复iframe界面缩放比例问题

当slide包含特定类型的iframe元素时,限制最大缩放比例为1,避免显示异常
lsc пре 1 час
родитељ
комит
b7da4e39f9
1 измењених фајлова са 18 додато и 2 уклоњено
  1. 18 2
      src/views/Screen/ScreenSlide.vue

+ 18 - 2
src/views/Screen/ScreenSlide.vue

@@ -4,7 +4,7 @@
     :style="{
       width: viewportSize + 'px',
       height: viewportSize * viewportRatio + 'px',
-      transform: `scale(${scale})`,
+      transform: `scale(${iframeScale})`,
     }"
   >
     <div class="background" :style="{ ...backgroundStyle }"></div>
@@ -25,7 +25,7 @@
 import { computed, provide } from 'vue'
 import { storeToRefs } from 'pinia'
 import { useSlidesStore } from '@/store'
-import type { Slide } from '@/types/slides'
+import { ElementTypes, type Slide } from '@/types/slides'
 import { injectKeySlideId } from '@/types/injectKey'
 import useSlideBackgroundStyle from '@/hooks/useSlideBackgroundStyle'
 
@@ -47,6 +47,22 @@ const { backgroundStyle } = useSlideBackgroundStyle(background)
 
 const slideId = computed(() => props.slide.id)
 provide(injectKeySlideId, slideId)
+
+// 判断是否包含指定类型的iframe界面
+const hasIframe = computed(() => {
+  return props.slide.elements.some(element => 
+    element.type === ElementTypes.FRAME && 
+    [72, 73, 75, 76].includes(element.toolType as number)
+  )
+})
+
+// 计算scale:如果是iframe界面且scale大于1就按1,否则按原scale
+const iframeScale = computed(() => {
+  if (hasIframe.value) {
+    return Math.min(props.scale, 1)
+  }
+  return props.scale
+})
 </script>
 
 <style lang="scss" scoped>