瀏覽器全屏之requestFullScreen全屏與F11全屏

来源:https://www.cnblogs.com/netgrace/archive/2018/03/10/js-fullscreen.html
-Advertisement-
Play Games

一、簡介 瀏覽器全屏有兩種方式,一種是HTML5新增的requestFullscreen全屏,另一種是摁F11實現的全屏,本文將詳解兩種全屏的特點以及其實現。 二、requestFullscreen全屏 1、判斷是否支持全屏 通過判斷元素的requestFullscreen函數是否存在與docume ...


一、簡介

  瀏覽器全屏有兩種方式,一種是HTML5新增的requestFullscreen全屏,另一種是摁F11實現的全屏,本文將詳解兩種全屏的特點以及其實現。

二、requestFullscreen全屏

  1、判斷是否支持全屏

  通過判斷元素的requestFullscreen函數是否存在與document.fullscreenEnabled是否為True判斷瀏覽器是否支持全屏或啟用全屏,相容寫法為

  

 1    function supportfull(){
 2         var requestFullscreen =
 3             document.body.requestFullscreen ||
 4             document.body.webkitRequestFullscreen ||
 5             document.body.mozRequestFullScreen ||
 6             document.body.msRequestFullscreen;
 7         var fullscreenEnabled =
 8             document.fullscreenEnabled ||
 9             document.mozFullScreenEnabled ||
10             document.webkitFullscreenEnabled ||
11             document.msFullscreenEnabled;
12         return !!(requestFullscreen && fullscreenEnabled);
13     }

  註意,requestFullscreen方法不存在於document對象上,並且註意字母s的大小寫

  2、進入全屏

  通過調用元素的requestFullscreen方法是元素進入全屏,使用時應註意:

  (1)requestFullscreen在document對象上沒有定義

  (2)requestFullscreen方法只能由用戶操作觸發(如onclick事件),在onload事件中調用此方法將無效。

  (3)當一個元素全屏時,再讓其子元素全屏是無效的,必須先退出全屏。

  (4)返回或跳轉頁面將退出全屏。

  (5)進入全屏的元素其父元素將不再是全屏之前的父元素,此時之前的css可能失效,:full-screen偽類可以為元素添加全屏時的樣式(使用時為了相容請加-webkit、-moz或-ms首碼)。

  下麵給出,進入全屏的JS代碼的相容寫法:

 1     function full(el) {
 2         if (el.requestFullscreen) {
 3             el.requestFullscreen();
 4         } else if (el.mozRequestFullScreen) {
 5             el.mozRequestFullScreen();
 6         } else if (el.webkitRequestFullscreen) {
 7             el.webkitRequestFullscreen();
 8         } else if (el.msRequestFullscreen) {
 9             el.msRequestFullscreen();
10         }
11     }

 

  3、獲取當前進入全屏的而元素

   通過document.fullscreenElement方法獲取當前全屏的元素,假設id為div1的Element當前為全屏狀態則 document.querySelector("#div1")===document.fullscreenElement,以下是獲取當前全屏元素的相容寫法:

1     function fullele() {
2         return(
3             document.fullscreenElement ||
4             document.webkitFullscreenElement ||
5             document.msFullscreenElement ||
6             document.mozFullScreenElement ||
7             null);
8     }

  4、判斷當前是否全屏

  通過document.fullscreenElement屬性是否為空來判斷,對於webkit內核的瀏覽器,還可以通過document.webkitIsFullScreen屬性來判斷,以下為相容寫法:

1     function isfull() {
2         return !!(document.webkitIsFullScreen || fullele());
3     }

 

  5、退出全屏

  通過document.exitFullscreen方法來退出全屏,對於不同內核的瀏覽器,方法名除了首碼不一樣外,其他地方也不一樣,以下為相容寫法

 1     function exitfull() {
 2         if (document.exitFullscreen) {
 3             document.exitFullscreen();
 4         }
 5         else if (document.mozCancelFullScreen) {
 6             document.mozCancelFullScreen();
 7         }
 8         else if (document.webkitExitFullscreen) {
 9             document.webkitExitFullscreen();
10         }
11         else if (document.msExitFullscreen) {
12             document.msExitFullscreen();
13         }
14     }

6、jQuery拓展,寫成jQuery拓展,調用將十分方便,下麵將給出一個實現:

  1 $.extend({
  2     supportfull: function () {
  3         var requestFullscreen =
  4             document.body.requestFullscreen ||
  5             document.body.webkitRequestFullscreen ||
  6             document.body.mozRequestFullScreen ||
  7             document.body.msRequestFullscreen;
  8         var fullscreenEnabled =
  9             document.fullscreenEnabled ||
 10             document.mozFullScreenEnabled ||
 11             document.webkitFullscreenEnabled ||
 12             document.msFullscreenEnabled;
 13         return !!(requestFullscreen && fullscreenEnabled);
 14     },
 15     //獲取當前全屏的元素
 16     fullele: function () {
 17         return(
 18             document.fullscreenElement ||
 19             document.webkitFullscreenElement ||
 20             document.msFullscreenElement ||
 21             document.mozFullScreenElement ||
 22             null);
 23     },
 24     //全屏,如果當前存在已經全屏的元素,則操作無效
 25     full: function (el) {
 26         if ($.isfull()) {
 27             if (el === $.fullele()) {
 28                 return;
 29             }
 30         }
 31         if (el.requestFullscreen) {
 32             el.requestFullscreen();
 33         } else if (el.mozRequestFullScreen) {
 34             el.mozRequestFullScreen();
 35         } else if (el.webkitRequestFullscreen) {
 36             el.webkitRequestFullscreen();
 37         } else if (el.msRequestFullscreen) {
 38             el.msRequestFullscreen();
 39         }
 40         return this;
 41     },
 42     //退出全屏
 43     exitfull: function () {
 44         if (document.exitFullscreen) {
 45             document.exitFullscreen();
 46         }
 47         else if (document.mozCancelFullScreen) {
 48             document.mozCancelFullScreen();
 49         }
 50         else if (document.webkitExitFullscreen) {
 51             document.webkitExitFullscreen();
 52         }
 53         else if (document.msExitFullscreen) {
 54             document.msExitFullscreen();
 55         }
 56         return this;
 57     },
 58     //是否全屏
 59     isfull: function () {
 60         return !!(document.webkitIsFullScreen || $.fullele());
 61     },
 62     //進入或取消全屏,如果當前全屏的元素不是指定的元素,則取消全屏無效
 63     togglefull: function (el, callback) {
 64         if ($.isfull()) {
 65             var fullele = $.fullele();
 66             if (el === fullele) {
 67                 $.exitfull();
 68             }
 69             return;
 70         }
 71         $.full(el);
 72         if (typeof callback == typeof $.noop) {
 73             callback(!$.isfull());
 74         }
 75         return this;
 76     }
 77 })
 78 $.fn.extend(
 79 {
 80     // 讓匹配的第一個元素全屏
 81     // 該方法應有用戶操作觸發,否則無效
 82     full: function () {
 83         if ($(this).length == 0)
 84             return;
 85         $.full(el);
 86         return this;
 87     },
 88     // 如果當前全屏的元素存在於匹配的元素集合中,則該元素會退出全屏
 89     exitfull: function () {
 90         if (isfull()) {
 91             var fullel = $.fullel();
 92             var index = $(this).index(fullel);
 93             if (index != -1) {
 94                 $.exitfull();
 95             }
 96         }
 97         return this;
 98     },
 99     // 該方法應由用戶操作觸發,只對匹配的第一個元素有效
100     togglefull: function (callback) {
101         if ($(this).length > 0) {
102             var el = $(this).first().get(0);
103             $.togglefull(el, callback);
104         }
105         return this;
106     },
107     // 為元素綁定點擊事件,以使點擊的元素進入或退出全屏
108     fullable: function (callback) {
109         $(this).on("click", function (e) {
110             $(this).togglefull(callback);
111         });
112         return this;
113     },
114 });
View Code

二、F11全屏

  1、未完待續。。。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 以前不怎麼有這樣的需求,最近開發經常用到,所以就乾脆封裝一個這樣的 Button 讓圖片和字體都垂直居中,重寫layoutSubviews方法,來實現就可以,至於 layoutSubviews 方法什麼時候觸發,可以自行查下; ...
  • IBOutlet或IBAction符號對編譯不產生任何影響,它們只是標記,用於告訴Xcode這些對象可以和UI控制項進行關聯,以便於在編輯Interface Builder上的UI控制項的時候Xcode可以自動提示。 參考資料:《iOS編程指南》 ...
  • 近日,樓主在同一臺手機上,同時安裝同一個游戲的不同渠道包,add install後,提示:Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=android.permission.具體許可權 pkg=渠道A游戲包名] 原因: 1、正要安裝的APP的自定義 ...
  • 當我們用RecyclerView時,如果想用某一個特定的版本,怎樣才能知道版本號呢?如果自己的筆記本中用過這個庫,那麼會保存在本地硬碟中。 Android自身依賴包的版本號本地存放路徑: 沒有用過該版本,也沒有關係,google develper中有說明:Support Library的版本號其實都 ...
  • 今天supprt28遇到的問題,由於28還是預覽版,還存在一些bug 都是因為如果程式內出現不同的,support或者其他外部引用庫的多個版本,Gradle在進行合併的時候會使用本地持有的,最高版本的來進行編譯,所以25的support就有可能引用26的東西,就會出現 屬性 merge 錯誤 ,或者 ...
  • 一、Gradle更新問題 Android Studio每次更新版本都會更新Gradle這個插件,而且有時候提示更新,卻一直更新不了,那是因為中國偉大的長城問題。就是下圖,我剛剛更新了,提示更新gradle,卻一直更新不了! 1.1 這有時候會導致停止在Refreshing Gradle Projec ...
  • 這個問題搞得我頭大,並且在查過百度後各位大佬給出的解釋我都不能理解,應該是我太白的原因,希望我寫的能好理解。 下麵文章視窗1、2、3,在代碼里分別為chuangkou、chuangkou1、chuangkou2. 下麵是我創建的一個及其簡易html框架結構: 製作這個網頁需要八個html文件,分別是 ...
  • 總結一下目前在用的前端代碼規範,可作為開發參考 一、基礎規範 開發規範 項目目錄和文件的命名使用小寫字母,避免使用大寫或駝峰,多個單詞以下劃線 _ 分隔 如:my_project/cast_detail.js 目錄有複數意義的時候,使用複數命名 如 scripts images 某些第三方插件可直接 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...