前端js使瀏覽器視窗全屏與退出----瀏覽器全屏時 監測通過esc按鍵退出全屏
阿新 • • 發佈:2021-01-19
vue專案 專案分為頂部導航、側邊導航、以及右邊mainContent區域
需求是 讓專案的其中一個頁面有全屏功能 並且在全屏時隱藏掉頂部的頂導航欄
實現:
1.在state裡 定義一個全域性flag 根據這個flag來控制頂導航的顯示與隱藏
定義在了usr module裡 在store裡引入就可以了
2.在頁面上的操作
頂導航頁面:
<el-header class="header" :style="{'display': (this.$store.state.user.screenFlag ? 'block': 'none')}">
通過定義的全域性標誌位控制頂導航是否顯示
子頁面裡:
<i class="el-icon-rank" @click="getFullScreen">
子頁面裡操作:
- getFullScreen(){
- //點選操作是否全屏時 對標誌位取反
- this.$store.commit('SET_NUM', !(this.$store.state.user.screenFlag));
- this.$store.state.user.screenFlag ?
- this.outFullCreeen(document):this.inFullCreeen(document.documentElement)
- },
- inFullCreeen(element){
- let el = element;
- let rfs = el.requestFullScreen || el.webkitRequestFullScreen ||
- el.mozRequestFullScreen || el.msRequestFullscreen;
- // ie下是msRequestFullscreen --- 要注意大小寫啊。。
- if (typeof rfs != "undefined" && rfs) {
- rfs.call(el);
- } else if (typeof window.ActiveXObject != "undefined") {
- let wscript = new ActiveXObject("WScript.Shell");
- if (wscript != null) {
- wscript.SendKeys("{F11}");
- }
- }
- },
- outFullCreeen(element){
- let el = element;
- let cfs = el.cancelFullScreen || el.webkitCancelFullScreen ||
- el.mozCancelFullScreen || el.exitFullScreen || el.msExitFullscreen;
- if (typeof cfs != "undefined" && cfs) {
- cfs.call(el);
- } else if (typeof window.ActiveXObject != "undefined") {
- let wscript = new ActiveXObject("WScript.Shell");
- if (wscript != null) {
- wscript.SendKeys("{F11}");
- }
- }
- }
到這裡就可以實現通過點選控制瀏覽器是否全屏了
問題是全屏時按鍵esc 退出全屏 導航欄不出現
瀏覽器在全屏時 監測不到esc按鍵的鍵盤事件!
解決方法一:
- created(){
- let that = this;
- //webkitfullscreenchange 是h5瀏覽器監控瀏覽器是否全屏的api
- //webkitfullscreenchange -- 谷歌 需考慮其他瀏覽器核心
- document.addEventListener('webkitfullscreenchange', function(e){
- //e.currentTarget.webkitIsFullScreen 可以判斷瀏覽器是否全屏
- if(!(e.currentTarget.webkitIsFullScreen)){
- //瀏覽器退出全屏時 將標誌位置為true來顯示頂部導航
- that.$store.commit('SET_NUM', true);
- }else{
- }
- });
- document.addEventListener('fullscreenchange', function(e){
- if(!(e.currentTarget.isFullScreen)){
- that.$store.commit('SET_NUM', true);
- }else{
- }
- });
- /!* 火狐 *!/
- document.addEventListener('mozfullscreenchange', function(e){
- if(!(e.currentTarget.mozIsFullScreen)){
- that.$store.commit('SET_NUM', true);
- }else{
- }
- });
- /!* IE *!/
- document.addEventListener('MSFullscreenChange', function(e){
- if(!(e.currentTarget.MSIsFullScreen)){
- that.$store.commit('SET_NUM', true);
- }else{
- }
- });
- },
剛開始是通過定義全域性點選是否全屏按鈕的次數 判斷對2取餘 來全屏或退出
esc按鍵時 這個數加亂了 很錯亂
另外監測瀏覽器是否全屏的方法從網上找的
checkFull() return isFull 那個在我這不管用
解決方法二:
剛知道全屏時樣式有偽類。。
那麼問題就更簡單了 只需要全屏的時候 讓導航欄display:none就可以了
也不用設定全域性變數來關聯header的行內樣式了
只需要在主佈局檔案里加上如下樣式:
:-webkit-full-screen .header { display: none!important; } :-moz-full-screen .header { display: none!important; } :-ms-fullscreen .header { display: none!important; } :fullscreen .header { display: none!important; }
樣式參考連結:
全屏時的偽類等等
https://blog.csdn.net/ligaoming_123/article/details/80605748