vue element-ui导航实现全屏/取消全屏功能

 更新时间:2024年08月28日 08:44:43   作者:IT博客技术分享  
这篇文章主要介绍了vue element-ui导航实现全屏/取消全屏功能,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

element-ui导航实现全屏/取消全屏功能

先上效果图

html部分代码:

      <!-- 全屏 -->
      <span class="user" @click="toggleFullScreen">
        <el-tooltip class="item" effect="dark" :content="isFullScreen ? '退出全屏':'全屏'" placement="bottom">
          <i :class="isFullScreen ? 'el-icon-aim':'el-icon-full-screen'" 
          style="width: 1.6rem;height: 1.6rem;vertical-align:middle;margin-right: .6rem;margin-bottom: .5rem;font-size:2rem"></i>
        </el-tooltip>
      </span>

data()定义部分:

  return{
      isFullScreen: false, //全屏开关
  }

js方法:

//全屏设置
      toggleFullScreen () {
        if (this.canFullScreen) {
          if (this.isFullScreen) {
            // 关闭全屏
            this.exitFullScreen()
            this.isFullScreen = false
          } else {
            // 打开全屏
            this.requestFullScreen(document.body)
            this.isFullScreen = true
          }
        } else {
          this.$message.warning({
            content: '当前浏览器暂不支持全屏模式,请切换浏览器后重新尝试!',
            duration: 3
          })
        }
      },
      requestFullScreen (element) {
        // 判断各种浏览器,找到正确的方法
        const requestMethod = element.requestFullScreen || // W3C
          element.webkitRequestFullScreen || // Chrome, safari
          element.mozRequestFullScreen || // FireFox
          element.msRequestFullscreen // IE11
        if (requestMethod) {
          requestMethod.call(element)
        }
      },
      exitFullScreen () {
        var exitMethod = document.exitFullscreen || // W3C
          document.mozCancelFullScreen || // FireFox
          document.webkitExitFullscreen || // Chrome等
          document.msExitFullscreen // IE11
        if (exitMethod) {
          exitMethod.call(document)
        }
      },
      addFullScreenListener () {
        const self = this
        document.onkeydown = function (e) {
          if (e && e.keyCode === 122) { // 捕捉F11键盘动作
            e.preventDefault() // 阻止F11默认动作
            self.toggleFullScreen()
          }
        }
        // 监听不同浏览器的全屏事件,并件执行相应的代码
        switch (self.browserKernel) {
          case 'webkit':
            document.onwebkitfullscreenchange = function () {
              if (document.webkitIsFullScreen) {
                self.isFullScreen = true
              } else {
                self.isFullScreen = false
              }
            }
            break
          case 'gecko':
            document.onmozfullscreenchange = function () {
              if (document.mozFullScreen) {
                self.isFullScreen = true
              } else {
                self.isFullScreen = false
              }
            }
            break
          case 'trident':
            document.onmsfullscreenchange = function () {
              if (document.msFullscreenElement) {
                self.isFullScreen = true
              } else {
                self.isFullScreen = false
              }
            }
            break
          case 'others':
            document.onfullscreenchange = function () {
              if (document.fullscreen) {
                self.isFullScreen = true
              } else {
                self.isFullScreen = false
              }
            }
            break
          default:
            break
        }
      },

优化方案

在页面初始化时判断浏览器是否支持全屏操作

// 检查浏览器是否支持全屏
      this.canFullScreen = document.fullscreenEnabled ||
        document.webkitFullscreenEnabled ||
        document.mozFullScreenEnabled ||
        document.msFullscreenEnabled
      if (document.webkitFullscreenEnabled) {
        this.browserKernel = 'webkit'
      } else if (document.mozFullScreenEnabled) {
        this.browserKernel = 'gecko'
      } else if (document.msFullscreenEnabled) {
        this.browserKernel = 'trident'
      } else if (document.fullscreenEnabled) {
        this.browserKernel = 'others'
      }
      if (this.canFullScreen) {
        this.addFullScreenListener()
      }

最后在销毁页面时移除监听:

destroyed(){
      document.onkeydown = null
      switch (this.browserKernel) {
        case 'webkit':
          document.onwebkitfullscreenchange = null
          break
        case 'gecko':
          document.onmozfullscreenchange = null
          break
        case 'trident':
          document.onmsfullscreenchange = null
          break
        case 'others':
          document.onfullscreenchange = null
          break
        default:
          break
      }
    }

如果想换图标可以自动定义

也可以用svg 图标引进来:

<i :class="isFullScreen ? 'el-icon-aim':'el-icon-full-screen'" ><i/>

总结

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

相关文章

  • 在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作

    在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作

    这篇文章主要介绍了在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue 注释template中组件的属性说明

    vue 注释template中组件的属性说明

    这篇文章主要介绍了vue 注释template中组件的属性说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue3 中 computed 新用法示例小结

    vue3 中 computed 新用法示例小结

    这篇文章主要介绍 vue3 中 computed 的新用法,对比 vue2 中的写法,让您快速掌握 vue3 中 computed 的新用法,对函数式写法,options 写法相关知识感兴趣的朋友一起看看吧
    2021-11-11
  • Vue中代码编辑器与实时预览功能

    Vue中代码编辑器与实时预览功能

    CodeMirror提供了强大的代码编辑功能,而Vue.js使得组件的创建和数据绑定变得非常简单,当用户编辑代码时,实时预览会根据代码的变化进行更新,从而为用户提供了一个交互式的编程环境,这篇文章主要介绍了Vue中如何进行代码编辑器与实时预览,需要的朋友可以参考下
    2023-10-10
  • vue Treeselect 树形下拉框:获取选中节点的ids和lables操作

    vue Treeselect 树形下拉框:获取选中节点的ids和lables操作

    这篇文章主要介绍了vue Treeselect 树形下拉框:获取选中节点的ids和lables操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue中渲染对象中属性时显示未定义的解决

    vue中渲染对象中属性时显示未定义的解决

    这篇文章主要介绍了vue中渲染对象中属性时显示未定义的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue中el-table树状表格末行合计实现

    vue中el-table树状表格末行合计实现

    本文主要介绍了vue中el-table树状表格末行合计实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • vue+openlayers绘制省市边界线

    vue+openlayers绘制省市边界线

    这篇文章主要为大家详细介绍了vue+openlayers绘制省市边界线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • vue学习笔记之作用域插槽实例分析

    vue学习笔记之作用域插槽实例分析

    这篇文章主要介绍了vue学习笔记之作用域插槽,结合实例形式分析了vue.js作用域插槽基本使用方法及操作注意事项,需要的朋友可以参考下
    2020-02-02
  • vuex入门最详细整理

    vuex入门最详细整理

    在本篇文章里小编给大家分享的是关于vuex入门最详细整理的相关内容,需要的朋友们参考下。
    2020-03-03

最新评论