vue中使用h5 video標(biāo)簽實(shí)現(xiàn)彈窗播放本地視頻的方法
參考h5 < video >標(biāo)簽的用法
在開(kāi)發(fā)過(guò)程中主要涉及到以下幾個(gè)需要關(guān)注的點(diǎn)
1.彈窗的打開(kāi)關(guān)閉
父組件中使用.sync綁定visible屬性,可直接在子組件中關(guān)閉彈窗更新父組件傳入的visible值;
// 父組件中引用子組件 <video-modal :visible.sync="showVideoModal"> // 子組件中 <el-dialog :visible="visible" @close="closeModal">
// 子組件中關(guān)閉彈窗方法
closeModal() {
this.$emit("updata:visible", false);
}不過(guò)這樣使用會(huì)導(dǎo)致每次重新打開(kāi)視頻彈窗進(jìn)度條都會(huì)留在上一次打開(kāi)的位置,所以需要在引用子組件外再嵌套一個(gè)div,利用v-if使其每次打開(kāi)都重新渲染,從而解決進(jìn)度條緩存的問(wèn)題;
<div v-if="showVideoModal">
<video-modal :visible.sync="showVideoModal">
</div>2. 本地視頻資源路徑的引入
需要播放的視頻是項(xiàng)目中的靜態(tài)資源,由于彈窗組件需要支持可復(fù)用,所以視頻路徑不可寫(xiě)死,下面示例為視頻名稱(chēng)自定義;
<video
ref="video"
class="play-video"
controls="controls"
autoplay="autoplay"
>
<source :src="require('@/assets/videos/' + videoName + '.mp4')" type="video/mp4" />
</video>如果視頻不在src目錄下,而是public目錄下則寫(xiě)法略有不同;
computed: {
src() {
// 需要在js部分用計(jì)算屬性定義
return process.env.BASE_URL + "videos/" + this.videoName + ".mp4";
}
},3. 視頻播放完畢自動(dòng)關(guān)閉彈窗
監(jiān)聽(tīng)video標(biāo)簽的ended事件并關(guān)閉彈窗即可,vue生命周期中定義需要增加this.$nextTick,否則無(wú)法獲取對(duì)應(yīng)的dom元素;
mounted() {
this.$nextTick(() => {
// 播放完畢自動(dòng)關(guān)閉彈窗
const eleVideo = document.querySelector(".play-video");
eleVideo.addEventListener("ended", () => {
this.closeVideoModal();
}, false);
});
},4. 視頻在彈窗中自適應(yīng)大小
給video標(biāo)簽設(shè)置合適的寬高,在利用object-fit: contain;屬性即可。
最后附上完整代碼
<template>
<el-dialog class="video-dialog" :visible="visible" :title="title" width="75%" append-to-body @close="closeVideoModal">
<video
ref="video"
class="play-video"
controls="controls"
autoplay="autoplay"
>
<source :src="src" type="video/mp4" />
</video>
</el-dialog>
</template>
<script>
export default {
name: "VideoModal",
props: {
visible: {
type: Boolean,
default: false
},
// 父組件傳參彈窗標(biāo)題
title: {
type: String,
default: ""
},
// 父組件傳參要播放的視頻名稱(chēng)
videoName: {
type: String,
default: ""
}
},
computed: {
src() {
return process.env.BASE_URL + "videos/" + this.videoName + ".mp4";
}
},
mounted() {
this.$nextTick(() => {
// 播放完畢自動(dòng)關(guān)閉彈窗
const eleVideo = document.querySelector(".play-video");
eleVideo.addEventListener("ended", () => {
this.closeVideoModal();
}, false);
});
},
methods: {
closeVideoModal() {
this.$emit("update:visible", false);
}
}
};
</script>
<style lang="scss" scoped>
.play-video {
object-fit: contain;
width: 100%;
height: 99.5%;
}
</style>到此這篇關(guān)于vue中使用h5 video標(biāo)簽實(shí)現(xiàn)彈窗播放本地視頻的方法的文章就介紹到這了,更多相關(guān)vue 彈窗播放本地視頻內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue視頻播放插件vue-video-player的具體使用方法
- vue使用video.js進(jìn)行視頻播放功能
- Vue結(jié)合Video.js播放m3u8視頻流的方法示例
- vue視頻播放暫停代碼
- vue-video-player視頻播放器使用配置詳解
- vue + typescript + video.js實(shí)現(xiàn) 流媒體播放 視頻監(jiān)控功能
- vue通過(guò)video.js解決m3u8視頻播放格式的方法
- vue-dplayer 視頻播放器實(shí)例代碼
- Vue使用video標(biāo)簽實(shí)現(xiàn)視頻播放
- vue+video.js實(shí)現(xiàn)視頻播放列表
相關(guān)文章
vue自定義插件封裝,實(shí)現(xiàn)簡(jiǎn)易的elementUi的Message和MessageBox的示例
這篇文章主要介紹了vue自定義插件封裝,實(shí)現(xiàn)簡(jiǎn)易的elementUi的Message和MessageBox的示例,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2020-11-11
詳解如何寫(xiě)出一個(gè)利于擴(kuò)展的vue路由配置
這篇文章主要介紹了詳解如何寫(xiě)出一個(gè)利于擴(kuò)展的vue路由配置,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
Vue 電商后臺(tái)管理項(xiàng)目階段性總結(jié)(推薦)
這篇文章主要介紹了Vue 電商后臺(tái)管理項(xiàng)目階段性總結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08
Vue中Vue-Baidu-Map基本使用方法實(shí)例
最近有一個(gè)項(xiàng)目需要用到地圖來(lái)展示位置并進(jìn)行數(shù)據(jù)交互,用vue-baidu-map實(shí)現(xiàn)出來(lái),下面這篇文章主要給大家介紹了關(guān)于Vue中Vue-Baidu-Map基本使用的相關(guān)資料,需要的朋友可以參考下2023-03-03
一文詳解Pinia和Vuex與兩個(gè)Vue狀態(tài)管理模式
這篇文章主要介紹了一文詳解Pinia和Vuex與兩個(gè)Vue狀態(tài)管理模式,Pinia和Vuex一樣都是是vue的全局狀態(tài)管理器。其實(shí)Pinia就是Vuex5,只不過(guò)為了尊重原作者的貢獻(xiàn)就沿用了這個(gè)看起來(lái)很甜的名字Pinia2022-08-08
Vue實(shí)現(xiàn)導(dǎo)出word文檔的示例詳解
這篇文章主要為大家詳細(xì)介紹了Vue如何使用第三方庫(kù)file-saver和html-docx-js實(shí)現(xiàn)導(dǎo)出word文檔的效果,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
Vue.js項(xiàng)目在IE11白屏報(bào)錯(cuò)的解決方法
本文主要介紹了Vue.js項(xiàng)目在IE11白屏報(bào)錯(cuò)的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-08-08

