我當前的項目要求支持IE10/IE11即可,其他瀏覽器edge、火狐、谷歌要求較新版本都要支持。
在網上看了許多例子,我的思路:
(1)使用screenfull來解決全屏操作
(2)利用監聽事件,禁用F11操作的全屏,只有由頁面“全屏”按鈕才能出發全屏;
(3)利用監聽事件,來改變isFullscreen的值,進而控制頁面展示“全屏”圖標,還是“退出全屏”圖標
1、安裝使用screenfull.js
npm install --save screenfull
2、在相應的組件引入screenful,我的js部分的代碼如下:
<script> import screenfull from 'screenfull' export default { data() { return { isFullscreen: false // false非全屏狀態、true全屏狀態 } }, created() { // 監聽事件 window.addEventListener('resize', this.onresize) window.addEventListener('keydown', this.keydown) }, beforeDestroy() { // 取消監聽事件 window.removeEventListener('resize', this.onresize) window.removeEventListener('keydown', this.keydown) }, methods: { // 切換是否全屏 toggleFullscreen(isFscreen) { if (!screenfull.enabled) { this.$message({ message: 'you browser can not work', type: 'warning' }) return false } screenfull.toggle() this.isFullscreen = isFscreen }, // 阻止F11默認事件 keydown(event) { if (event.keyCode === 122) { event.preventDefault() event.returnValue = false } }, /** * 響應屏幕變化事件,給isFullscreen賦值,標識是否全屏 * IE中bug: 調試器打開,且與頁面不分離時 -- 無效 * **/ onresize(event) { // 利用屏幕分辨率和window對象的內高度來判斷兼容IE let winFlag = window.innerHeight === window.screen.height // 利用window全屏標識來判斷 -- IE無效 let isFull = window.fullScreen || document.webkitIsFullScreen if (isFull === undefined) { this.isFullscreen = winFlag } else { this.isFullscreen = winFlag || isFull } console.log('winFlag || isFull', winFlag, isFull) } } } </script>