vue|video 的 this.$refs 使用上遇到問題

发布于 2022-09-13 00:31:57 字数 1291 浏览 13 评论 0

我的數據有五筆
第 1、2、5 是視頻
3、4 都是照片

template

<div 
          @mouseleave="handleLeave(item, index)"
          @mouseenter="handleEnter(item, index)">
<video
            ref="workCardVideo"
            muted
            playsinline>
            <source 
              :src="item.src" 
              type="video/mp4">
          </video>
</div>

method

handleEnter(item, index) {
      if (item.src.includes('.mp4'))
        this.handleItemVideo(false, 'play', index)
    },
    handleLeave(item, index) {
      if (item.src.includes('.mp4'))
        this.handleItemVideo(false, 'pause', index)
    },
    handleItemVideo(all, type, index) {
      if (type === 'pause')
        this.$refs.workCardVideo[index].pause()
      if (type === 'play')
        this.$refs.workCardVideo[index].play()
    },

遇到了個問題
由於並不是每個item.src都是視頻
所以鼠標移動到第五個區塊時會出現錯誤

[Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'play' of undefined"
[Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'pause' of undefined"

因為實際上 <video> 的 index 只有到 2
但我實際上給this.$refs的 index 是 4
所以出現這錯誤
想了老半天
請問這能怎麼解決?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

坐在坟头思考人生 2022-09-20 00:31:57

给渲染成照片的标签也加 ref = "workCardVideo",总而言之,确保每个 index 都有对应的workCardVideo

迷乱花海 2022-09-20 00:31:57

如果仅仅是想不报错,可以采用如下处理,即在相应处理前验证有效性

handleItemVideo(all, type, index) {
      if (type === 'pause' && this.$refs.workCardVideo[index] && this.$refs.workCardVideo[index].pause )
        this.$refs.workCardVideo[index].pause()
      if (type === 'play' && this.$refs.workCardVideo[index] && this.$refs.workCardVideo[index].play )
        this.$refs.workCardVideo[index].play()
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文