67 lines
1.5 KiB
Vue
67 lines
1.5 KiB
Vue
|
<template>
|
||
|
<view style="height: 250px"></view>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
export default {
|
||
|
props: {
|
||
|
src: {
|
||
|
type: String,
|
||
|
required: true
|
||
|
},
|
||
|
poster: {
|
||
|
type: String,
|
||
|
default: ''
|
||
|
},
|
||
|
playTime: {
|
||
|
type: Number,
|
||
|
default: 0
|
||
|
},
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
webview: null
|
||
|
}
|
||
|
},
|
||
|
mounted() {
|
||
|
this.createWebView()
|
||
|
},
|
||
|
beforeDestroy() {
|
||
|
plus.webview.close('video')
|
||
|
this.webview.removeEventListener('titleUpdate', this.handlePostMessage)
|
||
|
},
|
||
|
methods: {
|
||
|
createWebView() {
|
||
|
this.webview = plus.webview.create('/hybrid/html/video.html', 'video', {
|
||
|
top: uni.getSystemInfoSync().statusBarHeight + 44 + 'px',
|
||
|
height: '250px',
|
||
|
videoFullscreen: "landscape"
|
||
|
}, {
|
||
|
src: this.src,
|
||
|
poster: this.poster,
|
||
|
playTime: this.playTime
|
||
|
});
|
||
|
this.webview.show()
|
||
|
this.webview.addEventListener('titleUpdate', this.handlePostMessage)
|
||
|
},
|
||
|
handlePostMessage(event) {
|
||
|
const {eventName, currentTime} = JSON.parse(event.title)
|
||
|
const eventNameKeys = ['ready', 'seeking', 'seeked', 'play', 'pause', 'ended', 'timeupdate']
|
||
|
if (eventNameKeys.includes(eventName)) {
|
||
|
this.$emit(eventName, currentTime)
|
||
|
}
|
||
|
},
|
||
|
fn(event) {
|
||
|
const eventKeys = ['play', 'pause', 'destroy', 'fullscreen.exit']
|
||
|
if (eventKeys.includes(event)) {
|
||
|
this.webview.evalJS(`htmlMessage('${event}')`);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style scoped>
|
||
|
|
||
|
</style>
|