实现开启全屏模式和关闭全屏模式

浏览器底层给我们提供了开启全屏和关闭全屏的API

1 开启全屏: document.documentElement.requestFullscreen()

2 关闭全屏: document.exitFullscreen()

实例

<template>
  <!-- 放置一个图标 -->
  <div class="screenWrapper">
    <svg-icon
      :icon-class="isScreenFull? 'exit-fullscreen':'fullscreen'"
      class="fullscreen"
      @click="toggleScreen"
    />
  </div>
</template>

<script>
export default {
  name: 'ScreenFull',
  data() {
    return {
      isScreenFull: false
    }
  },
  mounted() {
    // // 在钩子函数中注册一个事件 注册给window
    // 这里的代码主要作用是:当我们按ESC时不会改变this.isScreenFull的值,所以我们在生命周期函数中写个事件监听,当开启全屏或者关闭全屏的时候会触发fullscreenchange这个事件
     window.addEventListener('fullscreenchange', () => {
       // 这块得用箭头函数因为不用箭头函数的话this指向当前事件源
        console.log(document.fullscreenElement)
       const flag = document.fullscreenElement
       console.log(flag)
       if (!flag) {
        console.log(123)
         this.isScreenFull = false
       }
     })
  },
  methods: {
    toggleScreen() {
       console.log(res)
       if (this.isScreenFull) {
         document.exitFullscreen()
         // this.isScreenFull = false
       } else {
        document.documentElement.requestFullscreen()
         // this.isScreenFull = true
       }
       this.isScreenFull = !this.isScreenFull // 直接在后边来个取反就好,就不用在if里赋值了
      // 这样写比较麻烦,而且得写很多,因为不同浏览器的兼容不一样,所以我们使用插件
    }
  }
}
</script>

<style lang="scss" scoped>
.screenWrapper {
  display: flex;
  align-items: center;
  margin-right: 20px;
}
.fullscreen {
  width: 20px;
  height: 20px;
  color: #fff;
  cursor: pointer;
}
</style>

这样写可以实现,如果要考虑浏览器兼容问题的话得考虑好多浏览器,得写很多的判断条件,所以可以使用简单的插件来完成,插件帮助我们解决了浏览器兼容问题

下载一个插件  叫 screenfull  网址 https://github.com/sindresorhus/screenfull.js#readme

下载的时候有时候需要指定下版本,因为并不是所有版本都适合目前自己做的项目

在使用vue-element-admin 后台管理项目中使用的是5版本 screenfull@5

安装后导入使用

<template>
  <!-- 放置一个图标 -->
  <div class="screenWrapper">
    <svg-icon
      :icon-class="isScreenFull? 'exit-fullscreen':'fullscreen'"
      class="fullscreen"
      @click="toggleScreen"
    />
  </div>
</template>

<script>
import screenfull from 'screenfull'
export default {
  name: 'ScreenFull',
  data() {
    return {
      isScreenFull: false
    }
  },
  mounted() {
    // screenfull在这里有一个on方法,监控事件的触发
    screenfull.on('change', () => {
      // screenfull.isFullscreen全屏返回true,退出全屏显示false,返回一个布尔值
      // console.log(screenfull.isFullscreen)
      // 要实现切换不同的图标
      this.isScreenFull = screenfull.isFullscreen
    })
  },
  methods: {
    toggleScreen() {
      // screenfull.isEnabled 判断当前浏览器是否支持全屏
      if (screenfull.isEnabled) {
        // screenfull.toggle 自动帮助我们完成了进入全屏和退出全屏
        screenfull.toggle()
      }
    }
  }
}
</script>

<style lang="scss" scoped>
.screenWrapper {
  display: flex;
  align-items: center;
  margin-right: 20px;
}
.fullscreen {
  width: 20px;
  height: 20px;
  color: #fff;
  cursor: pointer;
}
</style>


版权声明:本文为m0_70896270原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。