| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- <!--
- * @Descripttion: xgplayer二次封装
- * @version: 1.1
- * @Date: 2021年11月29日12:10:06
- * @LastEditTime: 2023年12月22日12:02:50
- -->
- <template>
- <div class="sc-video" ref="scVideo">
- <div v-if="showMask" class="sc-video__start-mock" @click="$emit('play')"></div>
- </div>
- </template>
- <script>
- import Player from 'xgplayer';
- import HlsPlayer from 'xgplayer-hls';
- export default {
- emits: ["play"],
- props: {
- showMask: { type: Boolean, default: false },
- src: { type: String, required: true, default: "" },
- autoplay: { type: Boolean, default: false },
- controls: { type: Boolean, default: true },
- loop: { type: Boolean, default: false },
- isLive: { type: Boolean, default: false },
- options: { type: Object, default: () => {} }
- },
- data() {
- return {
- player: null
- }
- },
- watch: {
- src(val) {
- if (this.player.hasStart) this.player.src = val;
- else this.player.start(val);
- }
- },
- mounted() {
- if (this.isLive) this.initHls();
- else this.init();
- },
- methods: {
- init() {
- this.player = new Player({
- el: this.$refs.scVideo,
- url: this.src,
- autoplay: this.autoplay,
- loop: this.loop, // 循环播放
- controls: this.controls,
- fluid: true, // 播放器宽度跟随父元素的宽度大小变化
- videoInit: true, // 初始化显示视频首帧
- lang: 'zh-cn',
- ...this.options
- });
- },
- initHls() {
- this.player = new HlsPlayer({
- el: this.$refs.scVideo,
- url: this.src,
- autoplay: this.autoplay,
- loop: this.loop,
- controls: this.controls,
- fluid: true,
- videoInit: true, // 初始化显示视频首帧
- isLive: true,
- ignores: ['time','progress'],
- lang: 'zh-cn',
- ...this.options
- });
- }
- }
- }
- </script>
- <style scoped>
- .sc-video:deep(.danmu) > * {
- color: #fff;
- font-size: 20px;
- font-weight: bold;
- text-shadow: 1px 1px 0 #000, -1px -1px 0 #000, -1px 1px 0 #000,
- 1px -1px 0 #000;
- }
- .sc-video__start-mock {
- cursor: pointer;
- width: 70px;
- height: 70px;
- position: absolute;
- left: calc(50% - 35px);
- top: calc(50% - 35px);
- z-index: 120;
- }
- .sc-video:deep(.xgplayer-controls) {
- background-image: linear-gradient(180deg, transparent, rgba(0, 0, 0, 0.3));
- }
- .sc-video:deep(.xgplayer-progress-tip) {
- border: 0;
- color: #fff;
- background: rgba(0, 0, 0, 0.5);
- line-height: 25px;
- padding: 0 10px;
- border-radius: 25px;
- }
- .sc-video:deep(.xgplayer-enter-spinner) {
- width: 50px;
- height: 50px;
- }
- </style>
|