Vue 等到外部请求完成

Vue wait until external request finished

我的 Vue 应用程序中有一个页面,它在进入路线时制作动画。但是,因为我在此页面中嵌入了一个 Vimeo 视频,所以在动画期间帧从 60fps 下降到 20fps。我认为这是因为必须向 Vimeo 服务器发出请求,并且在动画开始时尚未完成。

我想在第一次加载站点时预加载嵌入的 Vimeo 视频,或者以某种方式等到请求完成后再启动动画。我该怎么做?

视频在父组件中是这样嵌入的,动画在projecttop子组件中:

<div>
  <projecttop></projecttop>
  <div class="vimeo-container">
    <iframe src="https://player.vimeo.com/video/397648215" frameborder="0" allow="fullscreen"allowfullscreen></iframe>
   </div>
</div>

export default {
  name: 'parentcomponent',
  components: {
    projecttop
  }
}

这是带有动画的子组件:

<script>

import { gsap } from "gsap";

export default {
  name: "projecttop",
  methods: {
    slideIn() {
      var tl = gsap.timeline()
      tl.from('#project-title', {
        delay: 0.5,
        duration: 0.8,
        y: 100,
        opacity: 0,
        ease: "circ.out",
      })
    }
  },
  mounted () {
    if(document.readyState === "complete") {
      this.slideIn()
    }
  }
};
</script>

你可以在你的父组件中尝试这样的事情:

<projecttop :start-animation="videoLoaded"></projecttop>
<div class="vimeo-container">
  <iframe
    src="https://player.vimeo.com/video/397648215"
    frameborder="0"
    allow="fullscreen"
    allowfullscreen
    @load="videoLoaded = true
  >
  </iframe>
</div>

...
data() {
  return {
    videoLoaded: false,
  }
},

然后,在你的子组件中,传入videoLoaded的值,并添加一个watcher来监控何时更新为true:

props: {
  startAnimation: {
    type: Boolean,
    required: true
  }
},
watch: {
  startAnimation(val) {
    if (val) this.slideIn();
  }
}