React 显示全屏

利用React显示全屏,实现F11的效果。
是不是听上去很傻,明明可以按F11解决的事,非要求添加一个按钮控制。
话不多说,代码走起!
首先利用React生命周期,在页面渲染前监控屏幕大小。当document.body.scrollHeight === window.screen.height 或者 document.body.scrollWidth === window.screen.width 的时候表示页面处于全屏状态,此时图标变为退回全屏,反之则是全屏图标。
因为有的浏览器不支持全屏模式,所以在此之前设置一个函数 检测当前浏览器是否支持全屏,如果支持则显示全屏按钮。反之,不显示。

import React, { Component } from "react";
import { Button } from "antd";
import { judgeIsSupportFull, fullScreen, fullExit } from "../FullScreen/index";
export default class FullScree extends Component {
  state = {
    isSupportFull: false,
    isFull: false
  };
  componentDidMount() {
    window.addEventListener("resize", this.changeFullStatus);
    this.judgeIsSupportFull();
  }
  componentWillUnmount() {
    window.removeEventListener("resize", this.changeFullStatus);
  }
  // 判断当前浏览器是否支持全屏API
  judgeIsSupportFull = () => {
    let isSupportFull = judgeIsSupportFull();
    this.setState({ isSupportFull });
  };
  // 计算当前是否处于全屏
  changeFullStatus = () => {
    // 判断网页的高度或者宽度是否等于屏幕对应大小
    // true: 当前处于全屏状态
    // false: 当前不处于全屏状态
    if (
      document.body.scrollHeight === window.screen.height ||
      document.body.scrollWidth === window.screen.width
    ) {
      this.setState({ isFull: true });
    } else {
      this.setState({ isFull: false });
    }
  };
  // click button
  handClick = () => {
    this.state.isFull ? fullExit() : fullScreen();
  };
  // ============================================================
  render() {
    let { isSupportFull } = this.state;

    if (!isSupportFull) {
      return null;
    }

    return (
      <Button
        style={{ border: "none", color: "#696969" }}
        onClick={this.handClick}
        shape="circle"
        icon={this.state.isFull ? "shrink" : "arrows-alt"}
      />
    );
  }
}

export const judgeIsSupportFull = () => {
  let result = false;
  let element = document.documentElement;
  //IE 10及以下ActiveXObject
  if (window.ActiveXObject) {
    result = true;
  }
  //HTML W3C 提议
  else if (element.requestFullScreen) {
    result = true;
  }
  //IE11
  else if (element.msRequestFullscreen) {
    result = true;
  }
  // Webkit (works in Safari5.1 and Chrome 15)
  else if (element.webkitRequestFullScreen) {
    result = true;
  }
  // Firefox (works in nightly)
  else if (element.mozRequestFullScreen) {
    result = true;
  }

  return result;
};
//显示全屏
export const fullScreen = () => {
  let element = document.documentElement;
  //IE 10及以下ActiveXObject
  if (window.ActiveXObject) {
    console.log("IE 10及以下ActiveXObject");
    let WsShell = new ActiveXObject("WScript.Shell");
    WsShell.SendKeys("{F11}");
  }
  //HTML W3C 提议
  else if (element.requestFullScreen) {
    console.log("HTML W3C 提议");
    element.requestFullScreen();
  }
  //IE11
  else if (element.msRequestFullscreen) {
    console.log("IE11");
    element.msRequestFullscreen();
  }
  // Webkit (works in Safari5.1 and Chrome 15)
  else if (element.webkitRequestFullScreen) {
    console.log("Webkit");
    element.webkitRequestFullScreen();
  }
  // Firefox (works in nightly)
  else if (element.mozRequestFullScreen) {
    console.log("Firefox");
    element.mozRequestFullScreen();
  }
};
//退出全屏
export const fullExit = () => {
  var element = document.documentElement;
  //IE ActiveXObject
  if (window.ActiveXObject) {
    var WsShell = new ActiveXObject("WScript.Shell");
    WsShell.SendKeys("{F11}");
  }
  //HTML5 W3C 提议
  else if (element.requestFullScreen) {
    document.exitFullscreen();
  }
  //IE 11
  else if (element.msRequestFullscreen) {
    document.msExitFullscreen();
  }
  // Webkit (works in Safari5.1 and Chrome 15)
  else if (element.webkitRequestFullScreen) {
    document.webkitCancelFullScreen();
  }
  // Firefox (works in nightly)
  else if (element.mozRequestFullScreen) {
    document.mozCancelFullScreen();
  }
};

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放...
    孤魂草阅读 910评论 0 0
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AGI阅读 16,009评论 3 119
  • 一位朋友送我一张碟片,看了一眼——《台湾,晚九朝五》,很酷的名字。从他“暧昧”的眼神,我知道其中必有蹊跷。...
    芭蕉客阅读 3,340评论 0 1
  • 每个人的心中都有不同程度的自卑感,因为都想让自己的生活变得更好一些。 本书从家庭,孩子,夫妻等多方面进行了详细的讲...
    打不败的小闫闫阅读 309评论 0 0
  • 宋.晏殊 一向年光有限身, 等闲离别易销魂. 酒筵歌席莫辞频. 满目山河空念远, 落花风雨更伤春. 不如怜取眼前人.
    雨_莲阅读 246评论 0 0