前提・実現したいこと
Vue.jsでvideoタグを使用して動画を表示したのですが、durationとcurrentTimeが取れずに困っています。
画面に 00:00/12:00
のようにcurrentTime / duration
の形で表示したく思っています。
また、methodsでmovieElemとしている箇所ですが共通しているのですが、これの呼び出しを共通化する方法などがあればご教示いただければと思います。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
Vue.js
1<template lang="html"> 2 <div> 3 <video-header 4 :videoTitle="videoTitle" 5 /> 6 7 <!-- コンテンツ --> 8 <div class=""> 9 <!-- 動画エリア --> 10 <video 11 ref="movie" 12 :width="1136" 13 :height="640" 14 :src="video" 15 autoplay 16 pause="false" 17 ended="false" 18 /> 19 </div> 20 21 <!-- フッター --> 22 <video-footer 23 :playedIcon="playedIcon" 24 :soundedIcon="soundedIcon" 25 @isPlayed="isPlayed" 26 @isSounded="isSounded" 27 @isTimeSeek="isTimeSeek" 28 /> 29 </div> 30</template> 31 32<script> 33import VideoHeader from '~/components/contents/video/_VideoHeader.vue' 34import VideoFooter from '~/components/contents/video/_VideoFooter.vue' 35 36import playIcon from '~/assets/image/icons/play1.png' 37import pauseIcon from '~/assets/image/icons/pause1.png' 38// import rePlayIcon from '~/assets/image/icons/restart1.png' 39import soundIcon from '~/assets/image/icons/sound1.png' 40import muteIcon from '~/assets/image/icons/sound2.png' 41 42※① 43 44export default { 45 components: { 46 VideoHeader, 47 VideoFooter 48 }, 49 props: { 50 videoTitle: { 51 type: String, 52 required: true 53 }, 54 video: { 55 type: String, 56 required: true 57 } 58 }, 59 data () { 60 return { 61 playedIcon: pauseIcon, 62 soundedIcon: soundIcon, 63 vol: 50 64 } 65 }, 66 methods: { 67 // 再生/停止の切り替え 68 isPlayed () { 69 const movieElem = this.$refs.movie 70 // 動画が最後まで完了しているか 71 if (movieElem.ended) { 72 movieElem.currentTime = 0 // 先頭に移動する 73 } 74 // 動画が最後まで再生されていない場合 75 // 動画が一時停止状態か 76 if (movieElem.paused) { 77 // 一時停止の場合、再生する 78 movieElem.play() 79 this.playedIcon = pauseIcon 80 } else { 81 // 再生中の場合、一時停止する 82 movieElem.pause() 83 this.playedIcon = playIcon 84 } 85 }, 86 // 音量の切り替え 87 isSounded () { 88 const movieElem = this.$refs.movie 89 // ミュートを解除した場合 90 if (movieElem.muted) { 91 movieElem.muted = false 92 this.soundedIcon = soundIcon 93 } else { 94 movieElem.muted = true 95 this.soundedIcon = muteIcon 96 } 97 } 98 } 99} 100</script> 101 102<style lang="scss" scoped> 103 104</style> 105
試したこと
※①の部分に
const elem = this.$refs.movie
と記述して、dataに
duration: elem.duration
とした場合には
Cannot read property '$refs' of undefined
のエラーが出てしまいますので使えないかと思います。
mounted () { const elem = this.$refs.movie const duration = elem.duration }
とした場合にはNaNだったので、mountedでいいのかなと思いますが、取れていないようです。
補足情報(FW/ツールのバージョンなど)
Nuxt2.0.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。