質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2296閲覧

Vue.js(Nuxt.js)でvideoタグを使って動画の時間が取得できない

退会済みユーザー

退会済みユーザー

総合スコア0

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Nuxt.js

Nuxt.jsは、ユニバーサルなSPAが開発可能なVue.jsベースのフレームワーク。UIの描画サポートに特化しており、SSRにおけるサーバーサイドとクライアントサイドのUIレンダリングなどさまざまな機能を持ちます。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/05/15 11:43

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

durationはvideoタグにloadedmetadataイベントを指定してその中で取得できました。
currentTimeは再生されるたびに代わっていくのでまだうまく取得できていませんがもう少し考えてみてわからなかったときに再度質問させていただきます

投稿2020/05/18 01:53

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問