Vue 在视频持续时间可用之前触发挂载功能

Posted

技术标签:

【中文标题】Vue 在视频持续时间可用之前触发挂载功能【英文标题】:Vue firing mounted functions before video duration available 【发布时间】:2020-11-18 12:27:24 【问题描述】:

我正在尝试获取视频的持续时间并将其放置在 Vue 的 mount() 函数触发时的 div 中。代码如下:

标记:

<video v-on:click="playPause()" id="tsGameFilm" ref="gameFilm" preload="metadata">
   <source src="#hiddenForSO#" type="video/mp4">
</video>

mount() 函数

mounted() 
  this.setTime();
  this.$refs.endOfVideo.innerhtml = this.prettifyTimestamp(this.$refs.gameFilm.duration);
,

我遇到的问题是“this.$refs.gameFilm.duration”返回了 NaN。我怀疑 mount() 函数在视频的持续时间可用之前触发。这种怀疑源于这样一个事实,即 NaN 在视频的第一帧之前加载......

有什么想法吗?

编辑

尝试过没有用:

mounted() 
  this.setTime();
  this.$nextTick(function () 
    this.$refs.endOfVideo.innerHTML = this.prettifyTimestamp(this.$refs.gameFilm.duration);
  )
,

【问题讨论】:

【参考方案1】:

根据https://vuejs.org/v2/api/#mounted,您可以尝试使用nextTick

Note that mounted does not guarantee that all child components have also been mounted. If you want to wait until the entire view has been rendered, you can use vm.$nextTick inside of mounted:

【讨论】:

谢谢,我试过了,不幸的是它没有改变任何东西,仍然得到 NaN。请参阅上面的编辑,看看您是否同意我的实施方式... 谢谢你,我学会了区别!【参考方案2】:

也许附加事件侦听器以等待视频加载?见:

https://***.com/a/13875211/2411713

video.addEventListener('loadeddata', function() 
   // Video is loaded and can be played
, false);

【讨论】:

为了让它与 Vue 一起工作,我必须做一个 v-on:loadeddata 但这是一般的解决方案。谢谢!

以上是关于Vue 在视频持续时间可用之前触发挂载功能的主要内容,如果未能解决你的问题,请参考以下文章

在加载数据之前触发mounted方法 - VueJS

80%的视频已经被观看,如何触发功能?

vue 防抖和节流

为啥子组件的挂载钩子刚刚触发时,我们可以获取父组件的整个DOM?

如何在Vue中触发点击事件[关闭]

vue隐藏页面触发的生命周期