碰到一个需求,需要点击控制把页面中打开的 PDF 文档给全屏展示,撸了以下代码,撸完才发现VUE有插件直接就实现了,下面先是自己撸的
<template>
<div class="app-container-home">
<button @click="fullScreenAndExit()">全屏和退出</button>
<div>PDF文档</div>
</div>
</template>
<script>
export default {
name: "index",
data() {
return {
isFullScreen: false
};
},
methods:{
// 点击事件
fullScreenAndExit() {
const el = document.querySelector('.app-container-home')
this.toggleFullScreen(el)
},
/**
* 切换全屏
* @param {HTMLElement} element dom元素
*/
toggleFullScreen (element) {
if (!this.isFullScreen) {
this.fullScreen(element)
} else {
this.exitFullScreen()
}
this.isFullScreen = !this.isFullScreen
},
/**
* 全屏
* @param {HTMLElement} element dom元素
*/
fullScreen(element) {
const requestMethod = element.requestFullScreen
|| element.webkitRequestFullScreen
|| element.mozRequestFullScreen
|| element.msRequestFullScreen
if (requestMethod) {
requestMethod.call(element)
}
if (typeof window.ActiveXObject !== 'undefined') {
let wscript = new ActiveXObject('WScript.Shell')
if (wscript !== null) {
wscript.SendKeys('{F11}')
}
}
},
/**
* 退出全屏
*/
exitFullScreen () {
const documentElement = document
const cfs = documentElement.cancelFullScreen
|| documentElement.webkitCancelFullScreen
|| documentElement.mozCancelFullScreen
|| documentElement.exitFullScreen
if (cfs) {
cfs.call(documentElement)
} else if (typeof window.ActiveXObject !== 'undefined') {
// for IE,这里和fullScreen相同,模拟按下F11键退出全屏
const wscript = new ActiveXObject('WScript.Shell')
if (wscript != null) {
wscript.SendKeys('{F11}')
}
}
},
}
};
</script>
<style scoped lang="scss"></style>
VUE 插件实现
安装插件
npm install screenfull@5.0.2 --save
实际使用
<template>
<div>
<svg-icon :icon-class="isFullscreen?'exit-fullscreen':'fullscreen'" @click="click" />
</div>
</template>
<script>
import screenfull from 'screenfull'
export default {
name: 'Screenfull',
data() {
return {
isFullscreen: false
}
},
mounted() {
this.init()
},
beforeDestroy() {
this.destroy()
},
methods: {
click() {
if (!screenfull.isEnabled) {
this.$message({ message: '你的浏览器不支持全屏', type: 'warning' })
return false
}
screenfull.toggle()
},
change() {
this.isFullscreen = screenfull.isFullscreen
},
init() {
if (screenfull.isEnabled) {
screenfull.on('change', this.change)
}
},
destroy() {
if (screenfull.isEnabled) {
screenfull.off('change', this.change)
}
}
}
}
</script>
<style scoped>
.screenfull-svg {
display: inline-block;
cursor: pointer;
fill: #5a5e66;;
width: 20px;
height: 20px;
vertical-align: 10px;
}
</style>
网友评论