前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JavaScript实现全屏和退出全屏功能

JavaScript实现全屏和退出全屏功能

原创
作者头像
周陆军博客
发布2023-05-07 13:46:53
3.3K0
发布2023-05-07 13:46:53
举报
文章被收录于专栏:前端博客

我们有时候需要手动去设置浏览器全屏事件,这里写了一个函数,

//兼容谷歌 火狐  IE

全屏操作代码

代码语言:javascript
复制
class EventListen {
  constructor () {
    this.handers = []
  }

  /**
   *事件监听
   * @param event {string} 事件名称
   * @param fn {function} 触发函数
   */
  on (event, fn) {
    if (!this.handers[event]) {
      this.handers[event] = []
    }
    this.handers[event].push(fn)
  }

  /**
   *触发函数
   * @param event {string} 事件名
   * @param rest {*} 事件名
   */
  triger (event, ...rest) {
    let fns = this.handers[event]
    // 没有订阅 则返回
    if (!fns || fns.length === 0) {
      return null
    }
    fns.forEach(function (fn) {
      fn.apply(this, rest)
    })
    return null
  }
}

/**
 * 操作浏览器全屏状态函数,默认操作整个页面,函数判断六七千
 * @param element {Object} 需要操作全屏状态的元素,默认document.documentElement
 * @param isFullScreen 不传,自动判断当前元素是否为全屏状态
 * @param callback 回调函数
 * @return {Boolean}
 */
const fullscreenchange = Symbol('fullscreenchange')
const fullscreenerror = Symbol('fullscreenerror')

class FullScreen extends EventListen {
  constructor (available = false, enabled = true) {
    super(null)
    this.available = available
    this.enabled = enabled
    document.addEventListener('fullscreenchange', this[fullscreenchange].bind(this))
    document.addEventListener('webkitfullscreenchange', this[fullscreenchange].bind(this))
    document.addEventListener('mozfullscreenchange', this[fullscreenchange].bind(this))
    document.addEventListener('MSFullscreenChange', this[fullscreenchange].bind(this))
    // 监听浏览器器退出全屏
    document.addEventListener('fullscreenerror', this[fullscreenerror].bind(this))
    document.addEventListener('webkitfullscreenerror', this[fullscreenerror].bind(this))
    document.addEventListener('mozfullscreenerror', this[fullscreenerror].bind(this))
    document.addEventListener('MSFullscreenError', this[fullscreenerror].bind(this))
  }

  [fullscreenchange] (e) {
    this.triger('fullscreenchange', e)
  }

  [fullscreenerror] (e) {
    this.triger('fullscreenerror', e)
  }

  adjustFullScreenStatus (element = document.documentElement, isFullScreen, callback) {
    if (isFullScreen === undefined) {
      isFullScreen = document.isFullScreen || document.webkitIsFullScreen || document.mozIsFullScreen
    }
    const requestFullScreenFun = element.requestFullScreen || element.webkitRequestFullScreen || element.mozRequestFullScreen || element.msRequestFullscreen
    if (!isFullScreen) {
      if (typeof requestFullScreenFun === 'function' && requestFullScreenFun) {
        requestFullScreenFun && requestFullScreenFun.call(element)
        callback && callback()
        return true
      }
    } else {
      (document.exitFullscreen && document.exitFullscreen()) || (document.webkitCancelFullScreen && document.webkitCancelFullScreen()) || (document.mozCancelFullScreen && document.mozCancelFullScreen()) || (document.msExitFullscreen && document.msExitFullscreen())
      callback && callback()
    }
    return false
  }
}

let f = new FullScreen()
f.adjustFullScreenStatus()
f.on('fullscreenchange', (e) => {
  console.log('fullscreenchange')
  console.log(e)
})
f.on('fullscreenerror', (e) => {
  console.log('fullscreenerror')
})

包括

转载本站文章《JavaScript实现全屏和退出全屏功能》, 请注明出处:https://www.zhoulujun.cn/html/webfront/SGML/html5/2016_0616_8229.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档