当前位置: 代码网 > it编程>编程语言>Javascript > vue element-ui导航实现全屏/取消全屏功能

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

2024年09月05日 Javascript 我要评论
element-ui导航实现全屏/取消全屏功能先上效果图html部分代码: <!-- 全屏 --> <span class="user" @click="togg

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/>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com