作为web大屏设计中,全屏事件是应该不会少的一个按钮事件。
那么首先我们肯定要先定义一个变量来定义是否全屏。
data() {
return {
fullscreen: false
}
}
然后再在方法里面写好判断全屏事件处理
methods: {
handleFullScreen(doc) {
let element = null;
if (doc) {
element = document.querySelector(doc);
} else {
element = document.documentElement;
}
if (this.fullscreen) {
if (document.fullscreenElement !== null) {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}
} else {
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
}
}
}
}
做到这里此时,全屏事件一般就可以实现的了。
问题:但是web浏览器默认F11是执行全屏事件的,那么此时就会出现一个问题,F11全屏后,再点击这个handleFullScreen全屏事件就会出问题啦。因为此时的fullscreen的状态并没有随着F11的全屏改变而改变。
解决:监听F11和全局事件
methods: {
KeyDown(event) {
if (event.keyCode === 122) {
event.returnValue = false;
this.handleFullScreen();
}
},
setFullScreen() {
let isFull = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
if (!isFull) {
this.fullscreen = false;
} else {
this.fullscreen = true;
}
}
},
mounted() {
let isFull = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
this.fullscreen = !!isFull
window.addEventListener("keydown", this.KeyDown, true)
window.addEventListener("resize", this.setFullScreen)
},
beforeDestroy() {
window.removeEventListener("keydown", this.KeyDown, true)
window.removeEventListener("resize", this.setFullScreen)
}
把上面的整理写成一个混入,哪里需要就哪里引入
export default {
data() {
return {
fullscreen: false
}
},
methods: {
KeyDown(event) {
if (event.keyCode === 122) {
event.returnValue = false;
this.handleFullScreen();
}
},
handleFullScreen(doc) {
let element = null;
if (doc) {
element = document.querySelector(doc);
} else {
element = document.documentElement;
}
if (this.fullscreen) {
if (document.fullscreenElement !== null) {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}
} else {
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.webkitRequestFullScreen) {
element.webkitRequestFullScreen();
} else if (element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if (element.msRequestFullscreen) {
element.msRequestFullscreen();
}
}
},
setFullScreen() {
let isFull = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
if (!isFull) {
this.fullscreen = false;
} else {
this.fullscreen = true;
}
}
},
mounted() {
let isFull = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
this.fullscreen = !!isFull
window.addEventListener("keydown", this.KeyDown, true)
window.addEventListener("resize", this.setFullScreen)
},
beforeDestroy() {
window.removeEventListener("keydown", this.KeyDown, true)
window.removeEventListener("resize", this.setFullScreen)
}
}
<template>
<button @click="handleIcon"></button>
</template>
<script>
import fullscreen from "@/mixin/fullscreen.js";
export default {
mixins: [fullscreen],
methods: {
handleIcon() {
this.handleFullScreen();
}
}
}
</script>
此时,完成了这个全屏事件的处理了。