詳解vue3中如何使用youtube-player
正文
youtube-player 是 YouTube IFrame Player API (YIPA) 的封裝??梢栽谧约壕W(wǎng)站上播放YouTube視頻。
開始使用
使用 npm 下載
npm i youtube-player
做成組件youtubePlayer
<script setup>
import { ref, watch, onMounted, onBeforeUnmount } from "vue";
import YouTubePlayer from "youtube-player";
const props = defineProps({
id: { type: String, default: "" },
src: { type: String, required: true },
width: { type: Number, default: 0 },
height: { type: Number, default: 0 }
});
const emit = defineEmits(["ended", "play", "pause"]);
onMounted(() => {
initPlayer();
loadPlayer();
});
onBeforeUnmount(() => {
player && player.destroy();
});
const getVideoId = () => {
try {
const url = new URL(props.src);
return url.searchParams.get("v") || "";
} catch (error) {
return "";
}
};
let player = null;
const initPlayer = () => {
try {
player = YouTubePlayer(`youtube-${props.id}`, {
host: "https://www.youtube.com",
width: props.width,
height: props.height,
videoId: getVideoId(),
playsinline: 1,
rel: 0
});
} catch (error) {
console.log(error);
}
};
const loadPlayer = () => {
try {
player.loadVideoById(getVideoId());
} catch (error) {
console.log(error);
}
};
const play = () => player && player.playVideo();
const pause = () => player && player.pauseVideo();
// -1(未開始)0(已結(jié)束)1(正在播放)2(已暫停)3(正在緩沖)5(視頻已插入)
let stateChangeListener;
const addStateChange = () => {
stateChangeListener = player?.on("stateChange", (event) => {
if (event.data === 0) emit("ended");
if (event.data === 1) emit("play");
if (event.data === 2) emit("pause");
});
};
const removeStateChange = () => {
if (stateChangeListener) player?.off(stateChangeListener);
};
watch(
() => props.src,
() => loadPlayer()
);
defineExpose({ play, pause });
</script>
<template>
<div class="youtube-video">
<div :id="'youtube-' + id"></div>
</div>
</template>
<style lang="scss" scoped>
.youtube-video {
width: 100%;
overflow: hidden;
}
</style>
使用方式
<youtube-player src="https://www.youtube.com/watch?v=uRzs2kS3Blg"></youtube-player>
注意事項(xiàng)
播放器有默認(rèn)寬高,只能是px,需要做響應(yīng)式的要自己動態(tài)獲取寬高在重新設(shè)置。
常用參數(shù)
| 參數(shù) | |
|---|---|
| autoplay | 是否在播放器加載時(shí)自動開始播放初始視頻。支持的值為 0 或 1。默認(rèn)值為 0。 |
| controls | 視頻播放器控件是否會顯示。支持的值為 0 或 1。默認(rèn)值為 1。 |
| fs | 視頻播放器全屏按鈕是否會顯示。支持的值為 0 或 1。默認(rèn)值為 1。 |
| loop | 視頻是否會循環(huán)播放。支持的值為 0 或 1。默認(rèn)值為 0。 |
| playsinline | 此參數(shù)用于控制視頻在 iOS 設(shè)備上的 HTML5 播放器中播放時(shí),是以內(nèi)嵌方式還是全屏模式播放。支持的值為 0 或 1。默認(rèn)值為 0 全屏。 |
常用API
player.playVideo() 播放當(dāng)前已插入/已加載的視頻。
player.pauseVideo() 暫停當(dāng)前正在播放的視頻。
player.stopVideo() 停止和取消加載當(dāng)前視頻。
player.mute() 使播放器靜音。
player.unMute() 取消播放器靜音。
player.setSize(width:Number, height:Number) 設(shè)置包含播放器的<iframe>的大小。
player.destroy() 移除包含播放器的 <iframe>。
以上就是詳解vue3中如何使用youtube-player的詳細(xì)內(nèi)容,更多關(guān)于vue3使用youtube-player的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談vue中關(guān)于checkbox數(shù)據(jù)綁定v-model指令的個(gè)人理解
這篇文章主要介紹了淺談vue中關(guān)于checkbox數(shù)據(jù)綁定v-model指令的個(gè)人理解,v-model用于表單的數(shù)據(jù)綁定很常見,下面就來詳細(xì)的介紹一下2018-11-11
基于vue-cli3+typescript的tsx開發(fā)模板搭建過程分享
這篇文章主要介紹了搭建基于vue-cli3+typescript的tsx開發(fā)模板,本文通過實(shí)例代碼截圖的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
基于vue實(shí)現(xiàn)多功能樹形結(jié)構(gòu)組件的示例代碼
一個(gè)優(yōu)雅展示樹形結(jié)構(gòu)數(shù)據(jù)的 Vue 組件,遞歸渲染每個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn),支持自定義顏色、文本和布局,通過獨(dú)特的樣式巧妙處理不同層級,為用戶打造豐富的視覺盛宴,文中通過代碼給大家介紹的非常詳細(xì),感興趣的同學(xué)可以自己動手嘗試一下2024-02-02
詳解.vue文件中監(jiān)聽input輸入事件(oninput)
本篇文章主要介紹了詳解.vue文件中監(jiān)聽input輸入事件(oninput),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
vue實(shí)現(xiàn)在表格里,取每行的id的方法
下面小編就為大家分享一篇vue實(shí)現(xiàn)在表格里,取每行的id的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
15 分鐘掌握vue-next函數(shù)式api(小結(jié))
這篇文章主要介紹了15 分鐘掌握vue-next函數(shù)式api(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
vant中的Cascader級聯(lián)選擇異步加載地區(qū)數(shù)據(jù)方式
這篇文章主要介紹了vant中的Cascader級聯(lián)選擇異步加載地區(qū)數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Vue實(shí)現(xiàn)漸變色進(jìn)度條的代碼
這篇文章主要介紹了Vue實(shí)現(xiàn)漸變色進(jìn)度條的代碼,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04

