vue中对监听esc事件和退出全屏问题的解决方案

 更新时间:2022年08月09日 09:36:19   作者:砥砺前行 前程似锦  
这篇文章主要介绍了vue中对监听esc事件和退出全屏问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

对监听esc事件和退出全屏问题的解决

vue 的项目中使用了 h5 的全屏 API,在使用esc键退出全屏时,默认调用“ document.exitFullScreen() ” 直接退出,想要做监听并设置业务,需要监听屏幕size变化来出发事件

mounted() {
    
    let that = this
    window.addEventListener('resize', function () {
       if (!that.isFullScreen()) {
         // 非全屏状态
         //业务逻辑
                
       }
    });
}

下面是全屏的完整代码

methods: {
  //全屏
    fullele() {
      return (
        document.fullscreenElement ||
        document.webkitFullscreenElement ||
        document.msFullscreenElement ||
        document.mozFullScreenElement ||
        null
      );
    },
 
    //判断是否全屏
    isFullScreen() {
      return !!(document.webkitIsFullScreen || this.fullele());
    },
    //退出全屏
    exitFullscreen() {
      this.fullScreenFlag = false;
      
      if (document.exitFullScreen) {
        document.exitFullScreen();
      } else if (document.mozCancelFullScreen) {
        document.mozCancelFullScreen();
      } else if (document.webkitExitFullscreen) {
        document.webkitExitFullscreen();
      } else if (document.msExitFullscreen) {
        document.msExitFullscreen();
      }
      
    },
    //全屏
    full(ele) {
      if (ele.requestFullscreen) {
        ele.requestFullscreen();
      } else if (ele.mozRequestFullScreen) {
        ele.mozRequestFullScreen();
      } else if (ele.webkitRequestFullscreen) {
        ele.webkitRequestFullscreen();
      } else if (ele.msRequestFullscreen) {
        ele.msRequestFullscreen();
      }
    },
    //切换是否全屏 全屏按钮要执行的方法
    toggleFullScreen() {
      if (this.isFullScreen()) {
        this.exitFullscreen();
      } else {
        this.fullScreenFlag = true;
        this.full(document.getElementById("dataMointor")); //要设置全屏的元素
        
      }
      
    }
 
}

element+vue全屏与退出全屏(监听ESC改样式)

一、效果

在这里插入图片描述

在这里插入图片描述

esc退出会监听

在这里插入图片描述

二、代码

bom.js(工具)

/**
 * 浏览器全屏
 * @param {HTMLElement} [el=document] 全屏元素
 */
export function fullScreen(el) {
  el = el || document.documentElement;
  const rfs = el.requestFullScreen || el.webkitRequestFullScreen || el.mozRequestFullScreen || el.msRequestFullscreen;
  if (typeof rfs !== 'undefined' && rfs) {
    rfs.call(el);
  }
}
/**
 * 退出全屏
 */
export function exitFullScreen() {
  if (document.exitFullscreen) {
    document.exitFullscreen();
  } else if (document.mozCancelFullScreen) {
    document.mozCancelFullScreen();
  } else if (document.webkitCancelFullScreen) {
    document.webkitCancelFullScreen();
  } else if (document.msExitFullscreen) {
    document.msExitFullscreen();
  }
}
/**
 * 浏览器当前是否全屏
 * @return {*|boolean}
 */
export function isFullScreen() {
  return document.isFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen
}

design.js(通用)

function toggle(ele, that, exitFullScreen, fullScreen) {
  if (that.isFullScreen) {
    exitFullScreen()
    that.isFullScreen = false
  } else {
    fullScreen(document.getElementById(ele))
    that.isFullScreen = true
  }
}
export default {
  testVueThis,
  toggle
}

- index.vue(示例)

<template>
<my-panel fit
    id="test"
    :shadow="'never'"
    :border="false"
    title="cs">
  <div id="test">
    <div >
      <span>cs123</span>
      123
      </div>
    <el-tooltip :content="tooltipText">
      <span style="cursor: pointer">
        <i :class="icon"
          style="font-size: x-large"
          @click="toggle"></i>
      </span>
    </el-tooltip>
  </div>
</my-panel>
</template>
<script>
import Design from '@/utils/design'
import { fullScreen, exitFullScreen, isFullScreen } from '$ui/utils/bom'
export default {
  data() {
    return {
      isFullScreen: false
    }
  },
  computed: {
    icon() {
      return this.isFullScreen ? 'el-icon-switch-button' : 'el-icon-full-screen'
    },
    tooltipText() {
      return this.isFullScreen ? '退出全屏' : '全屏'
    }
  },
  created() {
    // 初始化监听器
    this.resizeListener()
  },
  methods: {
    resizeListener() {
      const that = this
      window.addEventListener('resize', function () {
        if (!isFullScreen()) {
          if (!isFullScreen()) {
            that.isFullScreen = false
          }
        }
      })
    },
    toggle() {
      Design.toggle('test', this, exitFullScreen, fullScreen)
    }
  }
}
</script>
<style>
</style>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue中mixins的使用方法详解

    Vue中mixins的使用方法详解

    mixins是一种分发 Vue 组件中可复用功能的使用方式,它是一个 js 对象,包含我们组件script中的任意功能选项,下面就跟随小编一起来看看它的具体使用吧
    2024-03-03
  • vue form表单使用resetFields函数出现的问题

    vue form表单使用resetFields函数出现的问题

    这篇文章主要介绍了vue form表单使用resetFields函数出现的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • vue v-viewer组件使用示例详解(v-viewer轮播图)

    vue v-viewer组件使用示例详解(v-viewer轮播图)

    这篇文章主要介绍了vue v-viewer组件使用示例详解(v-viewer轮播图),本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • Vue.js 60分钟快速入门教程

    Vue.js 60分钟快速入门教程

    vuejs是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的。今天给大家分享一篇教程关于Vue.js 60分钟快速入门教程,一起看看吧
    2017-03-03
  • Django+vue跨域问题解决的详细步骤

    Django+vue跨域问题解决的详细步骤

    这篇文章主要介绍了Django+vue跨域问题解决的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Vue3 源码解读之 Teleport 组件使用示例

    Vue3 源码解读之 Teleport 组件使用示例

    这篇文章主要为大家介绍了Vue3 源码解读之 Teleport 组件使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Vue项目启动报错解决方法大全

    Vue项目启动报错解决方法大全

    这篇文章主要给大家介绍了关于Vue项目启动报错解决方法的相关资料,文中通过图文将解决的过程介绍的非常详细,对大家学习或者使用vue具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Vue利用广度优先搜索实现watch

    Vue利用广度优先搜索实现watch

    这篇文章主要为大家学习介绍了Vue如何利用广度优先搜索实现watch(有意思),文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-08-08
  • vite多页面配置项目实战

    vite多页面配置项目实战

    vite官方文档中有关于多页面应用模式如果配置的说明,下面这篇文章主要给大家介绍了关于vite多页面配置的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 一篇文章带你彻底搞懂VUE响应式原理

    一篇文章带你彻底搞懂VUE响应式原理

    这篇文章主要介绍了一篇文章带你彻底搞懂VUE响应式原理,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可任意参考一下,需要的朋友可以参考下
    2022-06-06

最新评论