148 lines
3.0 KiB
Vue
148 lines
3.0 KiB
Vue
<template>
|
|
<video id="player" :class="clazz" :src="src" :autoplay="autoplay" :initial-time="initialTime" :enable-play-gesture="false" :title="title"
|
|
:enable-progress-gesture="false" :show-center-play-btn="false" :show-fullscreen-btn="false" :show-progress="true" @play="status=1"
|
|
@pause="status=0" @timeupdate="timeupdate" @fullscreenchange="fullscreenchange" :poster="pauseImg"
|
|
@ended="$emit('ended')" @error="errorFun" width="100%" height="100%" style="width: 100%;height: 100%;">
|
|
<cover-image src="../../static/loading_1920.gif" class="loading_box" v-if="isSHowLoading"
|
|
:play-strategy="2"></cover-image>
|
|
</video>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
inject: ['pageId', 'pageState'],
|
|
watch: {
|
|
|
|
},
|
|
props: {
|
|
clazz: {
|
|
type: String
|
|
},
|
|
title: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
src: {
|
|
type: String
|
|
},
|
|
autoplay: {
|
|
type: Boolean,
|
|
default: true
|
|
},
|
|
showProgress: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
isSHowLoading: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
pauseImg: {
|
|
type: String,
|
|
default: ""
|
|
},
|
|
failStatus: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
initialTime: {
|
|
type: Number,
|
|
default: 0
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
status: 0,
|
|
currentTime: 0,
|
|
fullScreen: false,
|
|
};
|
|
},
|
|
mounted() {
|
|
this.viderContext = uni.createVideoContext("player", this);
|
|
},
|
|
onLoad() {
|
|
uni.$on('keyDown', this.keyDownFun);
|
|
},
|
|
onUnload() {
|
|
uni.$off('keyDown', this.keyDownFun);
|
|
},
|
|
methods: {
|
|
keyDownFun(data) {
|
|
console.log("keyDownFun")
|
|
this.keyDown(data);
|
|
},
|
|
keyDown(Arrow) {
|
|
console.log("监测到按键:" + Arrow)
|
|
switch (Arrow) {
|
|
case 'KeyLeft': {
|
|
var time = parseInt(this.currentTime - 15, 10);
|
|
this.viderContext.seek(time < 0 ? 0 : time)
|
|
}
|
|
break;
|
|
case 'KeyRight': {
|
|
var time = parseInt(this.currentTime + 15, 10);
|
|
this.viderContext.seek(time);
|
|
}
|
|
break;
|
|
case 'KeyEnter': {
|
|
this.clickVideo();
|
|
}
|
|
break;
|
|
};
|
|
},
|
|
clickVideo() {
|
|
if (this.status) {
|
|
this.viderContext.pause();
|
|
this.viderContext.showStatusBar();
|
|
} else {
|
|
this.viderContext.play();
|
|
this.viderContext.hideStatusBar();
|
|
}
|
|
},
|
|
timeupdate: function(e) {
|
|
this.currentTime = e.detail.currentTime;
|
|
this.$emit("timeupdate", e.detail.currentTime)
|
|
},
|
|
fullscreenchange: function(e) {
|
|
this.fullScreen = e.detail.fullScreen;
|
|
this.pageState.handleEvent = e.detail.fullScreen;
|
|
uni.$off('keyDown', this.keyDownFun);
|
|
if (this.fullScreen) {
|
|
this.viderContext.play();
|
|
uni.$on('keyDown', this.keyDownFun);
|
|
}
|
|
this.$emit("fullscreenchange", e.detail.fullScreen)
|
|
},
|
|
errorFun() {
|
|
this.$emit("errorFun")
|
|
},
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
.controls-play.img {
|
|
position: absolute;
|
|
width: 100%;
|
|
height: 100%;
|
|
top: 50%;
|
|
left: 0%;
|
|
transform: translateY(-50%);
|
|
}
|
|
|
|
.loading_box {
|
|
position: fixed;
|
|
width: 100vw;
|
|
height: 100vh;
|
|
left: 0px;
|
|
top: 0px;
|
|
z-index: 100;
|
|
|
|
}
|
|
|
|
.fail_img {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
</style>
|