日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

全屏API及vue3 hook封装

發(fā)布時間:2023/11/25 vue 51 coder
生活随笔 收集整理的這篇文章主要介紹了 全屏API及vue3 hook封装 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近在一個大屏項目遇到一個需求:用戶可以通過一個按鈕,觸發(fā)頁面部分模塊全屏。通過以下API可以實現(xiàn):

Element.requestFullscreen()方法用于發(fā)出異步請求使元素進入全屏模式。

且全屏狀態(tài)變化會觸發(fā)以下事件:

fullscreenchange 事件會在瀏覽器進入或退出全屏模式后立即觸發(fā)。

基于以上API和事件,封裝了一個簡單的全屏hook

  • 響應式的全屏狀態(tài)
  • 可以指定元素進入/退出全屏模式
import { onMounted, onUnmounted, ref } from "vue";

export default function useFullScreen() {
  // 響應式全局狀態(tài)
  const isFullScreen = ref<boolean>(!!document.fullscreenElement);

  function fullscreenchanged() {
    // 如果有元素處于全屏模式,則 document.fullscreenElement 將指向該元素。如果沒有元素處于全屏模式,則該屬性的值為 null。
    if (document.fullscreenElement) {
      isFullScreen.value = true;
    } else {
      isFullScreen.value = false;
    }
  }

  onMounted(() => {
    // 通過 ESC 鍵可以退出全屏
    // 監(jiān)聽全屏事件,判斷當前是否處理全屏狀態(tài)
    document.addEventListener("fullscreenchange", fullscreenchanged);
  });

  onUnmounted(() => {
    document.removeEventListener("fullscreenchange", fullscreenchanged);
  });

  const fullScreen = async (dom?: HTMLElement) => {
    if (!document.fullscreenElement) {
      dom && dom.requestFullscreen();
    }
  };

  const exitFullScreen = () => {
    if (document.fullscreenElement) {
      document.exitFullscreen();
    }
  };

  return {
    isFullScreen,
    fullScreen,
    exitFullScreen,
  };
}

使用示例

const { isFullScreen, fullScreen, exitFullScreen } = useFullScreen();

// 點擊觸發(fā)全屏
const clickHandle = () => {
  dom && fullScreen(dom)
} 

而且需要特別注意,全屏模式,只能由用戶行為觸發(fā)。比如無法一進入頁面就由JS直接調(diào)起全屏,此時會有錯誤提示

Failed to execute 'requestFullscreen' on 'Element': API can only be initiated by a user gesture.

就算是創(chuàng)建一個元素,然后模擬觸發(fā)點擊事件也不行。只能由真實的用戶行為觸發(fā)。

總結

以上是生活随笔為你收集整理的全屏API及vue3 hook封装的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。