<template>
<video ref="myVideo" class="w-100 h-100" controls="controls" :src="videoUrl"></video>
</template>
<script>
export default {
name: 'video',
mounted() {
const myVideo = this.$refs.myVideo
this.$nextTick(() => {myVideo.addEventListener('play', this._bindHandlerFull)
myVideo.addEventListener('ended', this._unbindHandlerFull)
})
},
methods:{
// bind
_bindHandlerFull() {
const myVideo = this.$refs.myVideo
console.log('开始播放')
this.launchFullscreen(myVideo)
},
// unbind
_unbindHandlerFull() {console.log('播放完结')
// 檢查瀏覽器是否處於全屏
if (this.invokeFieldOrMethod(document, 'FullScreen') ||
this.invokeFieldOrMethod(document, 'IsFullScreen') ||
document.IsFullScreen
) {this.exitFullscreen()
}
},
// 反射调用
invokeFieldOrMethod(element, method) {
var usablePrefixMethod
;['webkit', 'moz', 'ms', 'o', ''].forEach(function(prefix) {if (usablePrefixMethod) return
if (prefix === '') {
// 无前缀,办法首字母小写
method = method.slice(0, 1).toLowerCase() + method.slice(1)
}
var typePrefixMethod = typeof element[prefix + method]
if (typePrefixMethod + ''!=='undefined') {if (typePrefixMethod === 'function') {usablePrefixMethod = element[prefix + method]()} else {usablePrefixMethod = element[prefix + method]
}
}
})
return usablePrefixMethod
},
// 进入全屏
launchFullscreen(element) {
// 此办法不能够在異步任務中執行,否則火狐無法全屏
if (element.requestFullscreen) {element.requestFullscreen()
} else if (element.mozRequestFullScreen) {element.mozRequestFullScreen()
} else if (element.msRequestFullscreen) {element.msRequestFullscreen()
} else if (element.oRequestFullscreen) {element.oRequestFullscreen()
} else if (element.webkitRequestFullscreen) {element.webkitRequestFullScreen()
} else {
var docHtml = document.documentElement
var docBody = document.body
var videobox = document.getElementById('videobox')
var cssText = 'width:100%;height:100%;overflow:hidden;'
docHtml.style.cssText = cssText
docBody.style.cssText = cssText
videobox.style.cssText = cssText + ';' + 'margin:0px;padding:0px;'
document.IsFullScreen = true
}
},
// 退出全屏
exitFullscreen() {if (document.exitFullscreen) {document.exitFullscreen()
} else if (document.msExitFullscreen) {document.msExitFullscreen()
} else if (document.mozCancelFullScreen) {document.mozCancelFullScreen()
} else if (document.oRequestFullscreen) {document.oCancelFullScreen()
} else if (document.webkitExitFullscreen) {document.webkitExitFullscreen()
} else {
var docHtml = document.documentElement
var docBody = document.body
var videobox = document.getElementById('videobox')
docHtml.style.cssText = ''docBody.style.cssText =''
videobox.style.cssText = ''
document.IsFullScreen = false
}
}
}
}
</script>