Vue 3 - Svgator播放器始終為undefined。
P粉478835592
P粉478835592 2023-07-28 08:44:31
0
1
510
<p>目前,我使用SVGator製作了SVG動畫。 <br />我將其作為資源導入到我的應用程式中,並嘗試讓它運行。 </p><p>我按照這份文件的說明成功實現了它的運作。 </p><p>但是,由於我可能需要創建大量的動畫,我嘗試將其更加通用。 </p><p><br /></p> <pre class="brush:js;toolbar:false;"><script setup lang="ts"> import { ref, defineComponent, h, component, watch } from 'vue'; import exampleSvg from '@assets/example.svg?raw'; interface IComponentProperties { svg: string; } const componentProperties = withDefaults(defineProps<IComponentProperties>(), { svg: () => exampleSvg, }); const element = ref<HTMLElement>(); const animatedSvg = defineComponent({ render() { return h('svg', { innerHTML: componentProperties.svg, ref: element }); }, }); function runAnimation() { if (!element.value) return; const { firstChild } = element.value; const svg = firstChild as any; svg?.svgatorPlayer?.play(); } watch( () => element.value, () => { runAnimation(); }, { immediate: true, } ); </script> <template> <Component :is="animatedSvg" /> </template> </pre> <p>這是一個完整的Vue應用程序,包含相同的程式碼。 </p><p>為什麼svg?.svgatorPlayer總是null? </p><p><strong></strong></p>
P粉478835592
P粉478835592

全部回覆(1)
P粉455093123

所以,為了回答你的問題,看起來你的firstChild是一個包含任何svgatorPlayer的HTMLElement。

你正在使用?raw將svg當作字串處理。

要修復這個問題,你必須按照這個答案來操作。

其次,閱讀所提供的文件後,你沒有使用JavaScript與svg一起使用,而是將其作為字串放置。這就是為什麼你的svgatorPlayer等於null,因為在js未執行時它不存在。一個解決方案是將svg放在v-html中執行,但要注意XSS注入的問題。

#
<template>
  <div v-html="exampleSvg"></div>
  <Component :is="animatedSvg" />
</template> 
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板