Files
art-design/src/components/core/media/art-video-player/index.vue
T
2025-07-04 17:16:38 +08:00

112 lines
2.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- 视频播放器组件:https://h5player.bytedance.com/-->
<template>
<div :id="playerId" />
</template>
<script setup lang="ts">
import Player from 'xgplayer'
import 'xgplayer/dist/index.min.css'
defineOptions({ name: 'ArtVideoPlayer' })
interface Props {
/** 播放器容器 ID */
playerId: string
/** 视频源URL */
videoUrl: string
/** 视频封面图URL */
posterUrl: string
/** 是否自动播放 */
autoplay?: boolean
/** 音量大小(0-1) */
volume?: number
/** 可选的播放速率 */
playbackRates?: number[]
/** 是否循环播放 */
loop?: boolean
/** 是否静音 */
muted?: boolean
commonStyle?: VideoPlayerStyle
}
const props = withDefaults(defineProps<Props>(), {
playerId: '',
videoUrl: '',
posterUrl: '',
autoplay: false,
volume: 1,
loop: false,
muted: false
})
// 设置属性默认值
// 播放器实例引用
const playerInstance = ref<Player | null>(null)
// 播放器样式接口定义
interface VideoPlayerStyle {
progressColor?: string // 进度条背景色
playedColor?: string // 已播放部分颜色
cachedColor?: string // 缓存部分颜色
sliderBtnStyle?: Record<string, string> // 滑块按钮样式
volumeColor?: string // 音量控制器颜色
}
// 默认样式配置
const defaultStyle: VideoPlayerStyle = {
progressColor: 'rgba(255, 255, 255, 0.3)',
playedColor: '#00AEED',
cachedColor: 'rgba(255, 255, 255, 0.6)',
sliderBtnStyle: {
width: '10px',
height: '10px',
backgroundColor: '#00AEED'
},
volumeColor: '#00AEED'
}
// 组件挂载时初始化播放器
onMounted(() => {
playerInstance.value = new Player({
id: props.playerId,
lang: 'zh', // 设置界面语言为中文
volume: props.volume,
autoplay: props.autoplay,
screenShot: true, // 启用截图功能
url: props.videoUrl,
poster: props.posterUrl,
fluid: true, // 启用流式布局,自适应容器大小
playbackRate: props.playbackRates,
loop: props.loop,
muted: props.muted,
commonStyle: {
...defaultStyle,
...props.commonStyle
}
})
// 播放事件监听器
playerInstance.value.on('play', () => {
console.log('Video is playing')
})
// 暂停事件监听器
playerInstance.value.on('pause', () => {
console.log('Video is paused')
})
// 错误事件监听器
playerInstance.value.on('error', (error) => {
console.error('Error occurred:', error)
})
})
// 组件卸载前清理播放器实例
onBeforeUnmount(() => {
if (playerInstance.value) {
playerInstance.value.destroy()
}
})
</script>