Pantalla completa del navegador vue3 y configuración de pantalla completa de ciertos elementos

Cuando un determinado contenido de la página deba mostrarse en pantalla completa, extraiga el código público a @/hooks/useScreenFull.ts y coopere con el almacenamiento vuex para controlar la visualización y ocultación de los elementos de la página;

import screenfull from 'screenfull';
import {
    
     ref, nextTick, watch } from 'vue';
import {
    
     useStore } from '../modules/portal/store/base';
/**
 * @description: 全屏hook
 * @param {string} ele - document选择器,不传为body
 * @return {*} isFull - 是否全屏状态;fullScreen - 全屏方法
 */
export default function useScreenFull(ele = 'body') {
    
    
  const isFull = ref(false);
  const store = useStore();

  const fullScreen = () => {
    
    
    nextTick(() => {
    
    
      if (screenfull.isEnabled && !isFull.value) {
    
    
        screenfull.request(document.querySelector(ele) as Element);
      } else {
    
    
        screenfull.toggle();
      }
    });
  };
  window.addEventListener('resize', () => {
    
    
    isFull.value = (window as any).fullscreen || (document as any).webkitIsFullScreen;
  });
  // 监听屏幕的全屏,关闭全屏
  document.addEventListener('fullscreenchange', function (event) {
    
    
    if (document.fullscreenElement) {
    
    
      isFull.value = true;
    } else {
    
    
      isFull.value = false;
    }
  });
  watch(
    () => isFull.value,
    () => {
    
    
    // vuex 改变全屏状态
      store.commit('screenFullState$$', isFull.value);
    }
  );

  return {
    
    
    isFull,
    fullScreen,
  };
}

La página se utiliza de la siguiente manera.

//引入方法
import useScreenFull from '@/hooks/useScreenFull';
// 全屏
const {
    
     isFull, fullScreen } = useScreenFull();

// dom
 <el-button link @click="fullScreen"
        ><span
          class="pdp_iconfont pms-margin-right--mi"
          :class="isFull ? 'icon-exit' : 'icon-full'"
        ></span
        >{
    
    {
    
     isFull ? '取消全屏' : '全屏' }}</el-button
      >

tienda vuex/base.js

import {
    
     createStore, useStore as baseUseStore, Store } from 'vuex';
export const BASE = {
    
    
  SCREEN_FULL_STATE: 'screenFullState$$', // 是否全屏
};

export interface Base {
    
    
  screenFullState: boolean;
}
const base = createStore({
    
    
  state() {
    
    
    return {
    
    
      screenFullState: false,
    };
  },
  getters: {
    
    
    [BASE.SCREEN_FULL_STATE](state: Base) {
    
    
      return state.screenFullState;
    },
  },
  mutations: {
    
    
    [BASE.SCREEN_FULL_STATE](state, payload) {
    
    
      state.screenFullState = payload;
    },
  },
});

export default base;

Al mismo tiempo, establezca la altura: 100% del elemento que debe estar en pantalla completa y la altura del estilo: 0px del contenido que debe ocultarse;

Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/kang_k/article/details/131398522
Recomendado
Clasificación