vue element-ui導(dǎo)航實(shí)現(xiàn)全屏/取消全屏功能
element-ui導(dǎo)航實(shí)現(xiàn)全屏/取消全屏功能
先上效果圖
html部分代碼:
<!-- 全屏 --> <span class="user" @click="toggleFullScreen"> <el-tooltip class="item" effect="dark" :content="isFullScreen ? '退出全屏':'全屏'" placement="bottom"> <i :class="isFullScreen ? 'el-icon-aim':'el-icon-full-screen'" style="width: 1.6rem;height: 1.6rem;vertical-align:middle;margin-right: .6rem;margin-bottom: .5rem;font-size:2rem"></i> </el-tooltip> </span>
data()定義部分:
return{ isFullScreen: false, //全屏開(kāi)關(guān) }
js方法:
//全屏設(shè)置 toggleFullScreen () { if (this.canFullScreen) { if (this.isFullScreen) { // 關(guān)閉全屏 this.exitFullScreen() this.isFullScreen = false } else { // 打開(kāi)全屏 this.requestFullScreen(document.body) this.isFullScreen = true } } else { this.$message.warning({ content: '當(dāng)前瀏覽器暫不支持全屏模式,請(qǐng)切換瀏覽器后重新嘗試!', duration: 3 }) } }, requestFullScreen (element) { // 判斷各種瀏覽器,找到正確的方法 const requestMethod = element.requestFullScreen || // W3C element.webkitRequestFullScreen || // Chrome, safari element.mozRequestFullScreen || // FireFox element.msRequestFullscreen // IE11 if (requestMethod) { requestMethod.call(element) } }, exitFullScreen () { var exitMethod = document.exitFullscreen || // W3C document.mozCancelFullScreen || // FireFox document.webkitExitFullscreen || // Chrome等 document.msExitFullscreen // IE11 if (exitMethod) { exitMethod.call(document) } }, addFullScreenListener () { const self = this document.onkeydown = function (e) { if (e && e.keyCode === 122) { // 捕捉F11鍵盤(pán)動(dòng)作 e.preventDefault() // 阻止F11默認(rèn)動(dòng)作 self.toggleFullScreen() } } // 監(jiān)聽(tīng)不同瀏覽器的全屏事件,并件執(zhí)行相應(yīng)的代碼 switch (self.browserKernel) { case 'webkit': document.onwebkitfullscreenchange = function () { if (document.webkitIsFullScreen) { self.isFullScreen = true } else { self.isFullScreen = false } } break case 'gecko': document.onmozfullscreenchange = function () { if (document.mozFullScreen) { self.isFullScreen = true } else { self.isFullScreen = false } } break case 'trident': document.onmsfullscreenchange = function () { if (document.msFullscreenElement) { self.isFullScreen = true } else { self.isFullScreen = false } } break case 'others': document.onfullscreenchange = function () { if (document.fullscreen) { self.isFullScreen = true } else { self.isFullScreen = false } } break default: break } },
優(yōu)化方案
在頁(yè)面初始化時(shí)判斷瀏覽器是否支持全屏操作
// 檢查瀏覽器是否支持全屏 this.canFullScreen = document.fullscreenEnabled || document.webkitFullscreenEnabled || document.mozFullScreenEnabled || document.msFullscreenEnabled if (document.webkitFullscreenEnabled) { this.browserKernel = 'webkit' } else if (document.mozFullScreenEnabled) { this.browserKernel = 'gecko' } else if (document.msFullscreenEnabled) { this.browserKernel = 'trident' } else if (document.fullscreenEnabled) { this.browserKernel = 'others' } if (this.canFullScreen) { this.addFullScreenListener() }
最后在銷(xiāo)毀頁(yè)面時(shí)移除監(jiān)聽(tīng):
destroyed(){ document.onkeydown = null switch (this.browserKernel) { case 'webkit': document.onwebkitfullscreenchange = null break case 'gecko': document.onmozfullscreenchange = null break case 'trident': document.onmsfullscreenchange = null break case 'others': document.onfullscreenchange = null break default: break } }
如果想換圖標(biāo)可以自動(dòng)定義 :
也可以用svg 圖標(biāo)引進(jìn)來(lái):
<i :class="isFullScreen ? 'el-icon-aim':'el-icon-full-screen'" ><i/>
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue?this.$refs.xxx獲取dom注意事項(xiàng)?v-if?v-for渲染的dom不能直接使用
這篇文章主要介紹了vue?this.$refs.xxx獲取dom注意事項(xiàng)?v-if?v-for渲染的dom不能直接使用問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03ant design vue中日期選擇框混合時(shí)間選擇器的用法說(shuō)明
這篇文章主要介紹了ant design vue中日期選擇框混合時(shí)間選擇器的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10一步步教你搭建VUE+VScode+elementUI開(kāi)發(fā)環(huán)境
這篇文章主要給大家介紹了關(guān)于搭建VUE+VScode+elementUI開(kāi)發(fā)環(huán)境的相關(guān)資料,近期被配置環(huán)境的事情弄得整個(gè)人都要炸了,現(xiàn)在整理如下,希望有相同需求的朋友可以不用走彎路,需要的朋友可以參考下2023-07-07在Vue3中處理異步API調(diào)用并更新表單數(shù)據(jù)的方法示例
這篇文章主要介紹了如何在Vue3中處理異步API調(diào)用并更新表單數(shù)據(jù)(附Demo),文中通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-06-06Vue入口文件index.html緩存的問(wèn)題及解決
這篇文章主要介紹了Vue入口文件index.html緩存的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03詳解vue2.0 不同屏幕適配及px與rem轉(zhuǎn)換問(wèn)題
這篇文章主要介紹了詳解vue2.0 不同屏幕適配及px與rem轉(zhuǎn)換問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02vuepress實(shí)現(xiàn)自定義首頁(yè)的樣式風(fēng)格
這篇文章主要介紹了vuepress實(shí)現(xiàn)自定義首頁(yè)的樣式風(fēng)格,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Vue3使用sessionStorage保存會(huì)話數(shù)據(jù)的實(shí)現(xiàn)方式
在前端開(kāi)發(fā)中,我們常常需要在用戶會(huì)話期間保存一些數(shù)據(jù),這些數(shù)據(jù)在頁(yè)面刷新或?qū)Ш綍r(shí)依然需要存在,sessionStorage 是一種非常方便的方式來(lái)實(shí)現(xiàn)這一點(diǎn),在這篇文章中,我們將探討如何在Vue3應(yīng)用中使用sessionStorage來(lái)保存會(huì)話數(shù)據(jù),需要的朋友可以參考下2025-01-01vue實(shí)現(xiàn)修改標(biāo)簽中的內(nèi)容:id class style
這篇文章主要介紹了vue實(shí)現(xiàn)修改標(biāo)簽中的內(nèi)容:id class style,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07