Vue 3 - Le lecteur Svgator est toujours indéfini.
P粉478835592
P粉478835592 2023-07-28 08:44:31
0
1
514
<p>Actuellement, j'utilise SVGator pour créer une animation SVG. <br />Je l'ai importé en tant que ressource dans mon application et j'ai essayé de le faire fonctionner. </p><p>J'ai suivi les instructions de ce document et je l'ai mis en œuvre avec succès. </p><p>Cependant, comme je devrai peut-être créer un grand nombre d'animations, j'ai essayé de le rendre plus général. </p><p><br /></p> <pre class="brush:js;toolbar:false;"><configuration du script lang="ts"> import { ref, definitionComponent, h, composant, watch } depuis 'vue' ; importer exampleSvg depuis '@assets/example.svg?raw' ; interface IComponentProperties { svg : chaîne ; } const composantProperties = withDefaults(defineProps<IComponentProperties>(), { svg : () => }); const élément = ref<HTMLElement>(); const animéSvg = définirComponent({ rendre() { return h('svg', { innerHTML : composantProperties.svg, ref : élément }); }, }); fonction runAnimation() { si (!element.value) retourne ; const { firstChild } = element.value; const svg = firstChild comme n'importe quel ; svg?.svgatorPlayer?.play(); } montre( () => élément.valeur, () => runAnimation(); }, { immédiat : vrai, } ); </script> <modèle> <Composant :is="animatedSvg" /> </modèle> ≪/pré> <p>Il s'agit d'une application Vue complète contenant le même code. </p><p>Pourquoi svg?.svgatorPlayer est-il toujours nul ? </p><p><strong></strong></p>
P粉478835592
P粉478835592

répondre à tous(1)
P粉455093123

Donc, pour répondre à votre question, il semble que votre firstChild soit un HTMLElement contenant n'importe quel svgatorPlayer.

Vous utilisez ?raw pour traiter le svg comme une chaîne.

Pour résoudre ce problème, vous devez suivre cette réponse.

Deuxièmement, en lisant la documentation fournie, vous n'utilisez pas JavaScript avec le svg, mais vous le placez plutôt sous forme de chaîne. C'est pourquoi votre svgatorPlayer est égal à null, car il n'existe pas lorsque le js n'est pas exécuté. Une solution consiste à exécuter le svg en v-html, mais soyez conscient du problème de l'injection XSS.

<template>
  <div v-html="exampleSvg"></div>
  <Component :is="animatedSvg" />
</template> 
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal