vue3浏览器全屏以及某元素全屏设置

当页面中某块内容需要全屏展示时,提取公共代码到@/hooks/useScreenFull.ts,同时配合vuex存储控制页面元素的展示和隐藏;

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,
  };
}

页面使用如下

//引入方法
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
      >

vuex里store/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;

同时设置需要全屏的元素的height: 100%;以及需要隐藏的内容的样式height: 0px;

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值