vue點(diǎn)擊按鈕實(shí)現(xiàn)讓頁面的某一個元素全屏展示
點(diǎn)擊按鈕讓頁面的某一個元素全屏展示
先上效果圖
項(xiàng)目情況:vue+screenfull插件
其實(shí)文檔上寫的很清楚:screenfull文檔
點(diǎn)擊頁面的全屏圖標(biāo),使包裹地圖的div實(shí)現(xiàn)全屏。

頁面結(jié)構(gòu)

在頁面加載時添加監(jiān)聽
mounted () {
const element = document.getElementById('map_container');
document.getElementById('full_screen').addEventListener('click', () => {
if (screenfull.isEnabled) {
screenfull.request(element);
}
});
},
vue全屏和退出全屏調(diào)用事件
1、先說一下需求
要求在第一個頁面點(diǎn)擊全屏按鈕進(jìn)入全屏或者第二個新的頁面全屏,并且按F11或esc退出全屏回退到第一個小屏頁面
失敗的嘗試:
顯示嘗試?yán)迷鷣韺?shí)現(xiàn),但是發(fā)現(xiàn)退出全屏?xí)r,我們想在F11上面添加一些事件(比如退回上一頁面路由;添加彈窗等操作)無法實(shí)現(xiàn),原因是瀏覽器不允許我們自定義F11退出全屏按鍵,因?yàn)槿绻梢宰远x的話,那么有惡意的方式讓用戶點(diǎn)擊全屏進(jìn)去,然后我們?nèi)ソ眠@個全屏按鈕那么豈不是用戶沒有辦法退出了
2、正確如下
利用screenfull插件直接去監(jiān)聽頁面的大小改變,不用去監(jiān)聽按鍵事件
首先安裝screenfull
npm install screenfull@4.2.0 --save
在需要全屏的組件中引入
import screenfull from "screenfull";
頁面全屏
template中寫好一個全屏按鈕和點(diǎn)擊事件
<div class="one" @click="btn"> ? ? ? ? ? ? <i ? ? ? ? ? ? ? class="iconfont icon-quanping1" ? ? ? ? ? ? ? style="margin-top: 1px;" ? ? ? ? ? ? ></i> ? ? ? ? ? </div>
在methods中添加btn事件
btn() {
? ? ? document.documentElement.webkitRequestFullScreen(); //進(jìn)入全屏
? ? ? screenfull.toggle();//全屏顯示
? ? },部分元素全屏
寫好點(diǎn)擊圖標(biāo),然后在需要顯示的元素上添加id
?? ?<div ? ? ? ? :class="isCollapse ? 'ifa-collapsed' : 'ifa'" ? ? ? ? ref="full_el" ? ? ? ? id="screen" ? ? ? > ? ? ? ? <router-view /> ? ? ? </div>
在methods中添加btn事件
? btn() {
? ? ? ?let element = document.getElementById("screen"); //指定全屏區(qū)域元素
? ? ? ? screenfull.toggle(this.element); //全屏顯示
? ? },退出全屏調(diào)用事件
如果是跳轉(zhuǎn)到第二個頁面全屏的狀態(tài)
當(dāng)esc或f11退出全屏后,我們雖然不能監(jiān)聽退出全屏的按鍵,但是可以根據(jù)監(jiān)聽頁面大小變化調(diào)用事件
data() {
? ? return {
? ? ? isFull:'',//全屏檢查
? ? ? }
? ?}
watch: {
? ? isFull(newvalue, oldvalue) {
? ? ? console.log("我監(jiān)聽到了");
? ? ? ?event.keyCode=0;
? ? ? ?
? ? ? this.$router.go(-1);
? ? },
? },
methods: {
? ? ? checkFull() {
? ? ? let isFull = window.fullScreen || document.webkitIsFullScreen;
? ? ? this.isFull = isFull;
? ? ? console.log("isfull"+this.isFull);
? ? },
?},
created() {
? ? ?window.onresize = () => {
? ? ? //調(diào)用判斷全屏的方法,用來監(jiān)聽
? ? ? this.checkFull();
? ? };
? },注意點(diǎn):
如果頁面當(dāng)中echars圖或者是有組件有使用過window.onresize方法進(jìn)行適應(yīng)時,那么此時的created監(jiān)聽退出全屏?xí)В?/p>
解決方式:
- 1.刪點(diǎn)組件中的window.onresize函數(shù)
- 2.利用監(jiān)聽的方式同時監(jiān)聽兩個onresize方法如下
?? ??? ?window.addEventListener("resize", () => {
? ? ? ? ? this.myChart.resize(),//可以自定義添加多個方法
? ? ? ? ? ?this.checkFull();
? ? ? ? });就可以解決沖突的問題了。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Element-UI 解決el-table中圖片懸浮被遮擋問題小結(jié)
在開發(fā)中,發(fā)現(xiàn)element-ui在el-table中添加圖片懸浮顯示時,會被單元格遮擋的問題,對于此問題解決其實(shí)也并不難,將懸浮圖片放在body節(jié)點(diǎn)下,通過定位顯示即可,感興趣的朋友跟隨小編一起看看吧2024-06-06
vue中Axios添加攔截器刷新token的實(shí)現(xiàn)方法
Axios是一款網(wǎng)絡(luò)前端請求框架,本文主要介紹了vue中Axios添加攔截器刷新token的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
vue3循環(huán)設(shè)置ref并獲取的解決方案
我們在平時做業(yè)務(wù)的時候,父子組件通信會經(jīng)常用到ref,這篇文章主要給大家介紹了關(guān)于vue3循環(huán)設(shè)置ref并獲取的解決方案,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02
vue實(shí)現(xiàn)在v-html的html字符串中綁定事件
今天小編就為大家分享一篇vue實(shí)現(xiàn)在v-html的html字符串中綁定事件,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10
elementUI中el-upload文件上傳的實(shí)現(xiàn)方法
ElementUI的組件支持多種事件鉤子,如http-request、before-upload和on-change,以實(shí)現(xiàn)自定義文件上傳處理,這篇文章主要介紹了elementUI中el-upload文件上傳的實(shí)現(xiàn)方法,需要的朋友可以參考下2024-11-11
詳解Vue如何進(jìn)行分布式事務(wù)管理以及解決方案
在分布式系統(tǒng)中,事務(wù)管理是一個非常重要的問題,所以本文將介紹一下Vue中如何進(jìn)行分布式事務(wù)管理以及分布式事務(wù)解決方案,希望對大家有所幫助2023-06-06
Vue3獲取DOM節(jié)點(diǎn)的3種方式實(shí)例
Vue本來無需操作DOM來更新界面,而且Vue也不推薦我們直接操作DOM,但是我們非要拿到DOM操作DOM怎么辦,下面這篇文章主要給大家介紹了關(guān)于Vue3獲取DOM節(jié)點(diǎn)的3種方式,需要的朋友可以參考下2023-02-02
Vue + CSS實(shí)現(xiàn)漸變柵格進(jìn)度條效果
基于Vue和CSS實(shí)現(xiàn)漸變柵格進(jìn)度條,通過劃分柵格單元、顏色漸變、標(biāo)簽與刻度的絕對定位來實(shí)現(xiàn)高度靈活和交互性,進(jìn)度條劃分為多個柵格,每個單元格顏色漸變并且連續(xù),可以根據(jù)不同的場景配置個性化屬性,具有極高的靈活度和交互性,感興趣的朋友一起看看吧2025-03-03

