vue中對(duì)監(jiān)聽(tīng)esc事件和退出全屏問(wèn)題的解決方案
對(duì)監(jiān)聽(tīng)esc事件和退出全屏問(wèn)題的解決
vue 的項(xiàng)目中使用了 h5 的全屏 API,在使用esc鍵退出全屏?xí)r,默認(rèn)調(diào)用“ document.exitFullScreen() ” 直接退出,想要做監(jiān)聽(tīng)并設(shè)置業(yè)務(wù),需要監(jiān)聽(tīng)屏幕size變化來(lái)出發(fā)事件
mounted() {
? ??
? ? let that = this
? ? window.addEventListener('resize', function () {
? ? ? ?if (!that.isFullScreen()) {
? ? ? ? ?// 非全屏狀態(tài)
? ? ? ? ?//業(yè)務(wù)邏輯
? ? ? ? ? ? ? ??
? ? ? ?}
? ? });
}下面是全屏的完整代碼
methods: {
//全屏
fullele() {
return (
document.fullscreenElement ||
document.webkitFullscreenElement ||
document.msFullscreenElement ||
document.mozFullScreenElement ||
null
);
},
//判斷是否全屏
isFullScreen() {
return !!(document.webkitIsFullScreen || this.fullele());
},
//退出全屏
exitFullscreen() {
this.fullScreenFlag = false;
if (document.exitFullScreen) {
document.exitFullScreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
},
//全屏
full(ele) {
if (ele.requestFullscreen) {
ele.requestFullscreen();
} else if (ele.mozRequestFullScreen) {
ele.mozRequestFullScreen();
} else if (ele.webkitRequestFullscreen) {
ele.webkitRequestFullscreen();
} else if (ele.msRequestFullscreen) {
ele.msRequestFullscreen();
}
},
//切換是否全屏 全屏按鈕要執(zhí)行的方法
toggleFullScreen() {
if (this.isFullScreen()) {
this.exitFullscreen();
} else {
this.fullScreenFlag = true;
this.full(document.getElementById("dataMointor")); //要設(shè)置全屏的元素
}
}
}element+vue全屏與退出全屏(監(jiān)聽(tīng)ESC改樣式)
一、效果


esc退出會(huì)監(jiān)聽(tīng)

二、代碼
bom.js(工具)
/**
* 瀏覽器全屏
* @param {HTMLElement} [el=document] 全屏元素
*/
export function fullScreen(el) {
el = el || document.documentElement;
const rfs = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullscreen;
if (typeof rfs !== 'undefined' && rfs) {
rfs.call(el);
}
}
/**
* 退出全屏
*/
export function exitFullScreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}
/**
* 瀏覽器當(dāng)前是否全屏
* @return {*|boolean}
*/
export function isFullScreen() {
return document.isFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen
}
design.js(通用)
function toggle(ele, that, exitFullScreen, fullScreen) {
if (that.isFullScreen) {
exitFullScreen()
that.isFullScreen = false
} else {
fullScreen(document.getElementById(ele))
that.isFullScreen = true
}
}
export default {
testVueThis,
toggle
}
- index.vue(示例)
<template>
<my-panel fit
id="test"
:shadow="'never'"
:border="false"
title="cs">
<div id="test">
<div >
<span>cs123</span>
123
</div>
<el-tooltip :content="tooltipText">
<span style="cursor: pointer">
<i :class="icon"
style="font-size: x-large"
@click="toggle"></i>
</span>
</el-tooltip>
</div>
</my-panel>
</template>
<script>
import Design from '@/utils/design'
import { fullScreen, exitFullScreen, isFullScreen } from '$ui/utils/bom'
export default {
data() {
return {
isFullScreen: false
}
},
computed: {
icon() {
return this.isFullScreen ? 'el-icon-switch-button' : 'el-icon-full-screen'
},
tooltipText() {
return this.isFullScreen ? '退出全屏' : '全屏'
}
},
created() {
// 初始化監(jiān)聽(tīng)器
this.resizeListener()
},
methods: {
resizeListener() {
const that = this
window.addEventListener('resize', function () {
if (!isFullScreen()) {
if (!isFullScreen()) {
that.isFullScreen = false
}
}
})
},
toggle() {
Design.toggle('test', this, exitFullScreen, fullScreen)
}
}
}
</script>
<style>
</style>以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
el-dialog關(guān)閉再打開(kāi)后窗口內(nèi)容不刷新問(wèn)題及解決
這篇文章主要介紹了el-dialog關(guān)閉再打開(kāi)后窗口內(nèi)容不刷新問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
淺談vue 組件中的setInterval方法和window的不同
這篇文章主要介紹了淺談vue 組件中的setInterval方法和window的不同,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
vue3+elementPlus項(xiàng)目支持設(shè)置默認(rèn)附件方式
這篇文章主要介紹了vue3+elementPlus項(xiàng)目支持設(shè)置默認(rèn)附件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
vue3實(shí)現(xiàn)搜索項(xiàng)超過(guò)n行就折疊的思路詳解
我們?cè)谧隽斜聿樵兊臅r(shí)候,會(huì)有很多查詢項(xiàng),如何實(shí)現(xiàn)超過(guò)n行查詢項(xiàng)的時(shí)候自動(dòng)折疊起來(lái)呢?本文給大家分享vue3實(shí)現(xiàn)搜索項(xiàng)超過(guò)n行就折疊的思路詳解,感興趣的朋友一起看看吧2022-06-06
Vue組件中的data必須是一個(gè)function的原因淺析
這篇文章主要介紹了Vue組件中的data必須是一個(gè)function的原因淺析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09
Vue3+echarts5踩坑以及resize方法報(bào)錯(cuò)的解決
這篇文章主要介紹了Vue3+echarts5踩坑以及resize方法報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
詳解vue-cli+element-ui樹(shù)形表格(多級(jí)表格折騰小計(jì))
這篇文章主要介紹了vue-cli + element-ui 樹(shù)形表格(多級(jí)表格折騰小計(jì)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04
vue采用EventBus實(shí)現(xiàn)跨組件通信及注意事項(xiàng)小結(jié)
EventBus是一種發(fā)布/訂閱事件設(shè)計(jì)模式的實(shí)踐。這篇文章主要介紹了vue采用EventBus實(shí)現(xiàn)跨組件通信及注意事項(xiàng),需要的朋友可以參考下2018-06-06

