首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vuex getter实时更新audio.currentTime状态

问Vuex getter实时更新audio.currentTime状态
EN

Stack Overflow用户
提问于 2019-08-08 10:52:07
回答 2查看 966关注 0票数 2

我想让Vuex存储中的音频播放器使用它的数据输出到Vue组件中的自定义音频播放器。

在Vuex商店里,有一家国有房地产公司aplayer播放音乐。store.js代码:

代码语言:javascript
复制
state: {
  aplayer: new Audio()
},
getters: {
  getCurrentTime: state => state.aplayer.currentTime
}

在组件中,我要显示当前歌曲的aplayer.currentTime。我试图通过在计算属性中使用getter getPlayer来获得它。

components.vue代码:

代码语言:javascript
复制
getCurrentTime() {
  return this.$store.getters.getCurrentTime;
}

但是,当输出到模板时,当前时间会冻结到0。但是,当我按下“暂停”时,当前时间将被正确显示。

请帮帮忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-08 11:34:55

Vue在观察普通对象时效果最好,而Audio不是。Vue无法检测currentTime属性何时更改。

来自文档

对象必须是简单的:忽略本机对象(如browser、API对象、和prototype属性)。经验法则是,数据应该只是数据--不建议观察具有自己有状态行为的对象。

最好的解决方案是生成自己的currentTime number属性,并在播放音频时使用setInterval周期性地将其值同步到audio.currentTime,并在暂停音频时清除间隔。

票数 2
EN

Stack Overflow用户

发布于 2019-08-08 11:08:09

store.js

代码语言:javascript
复制
state: {
  aplayer: new Audio()
},
getters: {
  getCurrentTime: state => state.aplayer.currentTime
}

Component.vue

代码语言:javascript
复制
<template>
  <div>{{getCurrentTime}}</div>
</template>

<script>
  import { mapGetters } from 'vuex'

  export default {
    computed: {
      ...mapGetters(['getCurrentTime'])
    }
  }
</script>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57410904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档