UNPKG

@linkdesign/screen

Version:

屏组件库,但使用场景又不局限于屏。主要用于BI、大盘和屏

141 lines (140 loc) 5.97 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _title = _interopRequireDefault(require("../title")); var _context = _interopRequireDefault(require("../context")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } /** * 全屏切换 * * @class FullscreenSwitch * @extends {PureComponent<IProps, IState>} */ var FullscreenSwitch = /*#__PURE__*/function (_PureComponent) { (0, _inheritsLoose2["default"])(FullscreenSwitch, _PureComponent); function FullscreenSwitch(props) { var _this; _this = _PureComponent.call(this, props) || this; _this.openFullscreen = function (elem) { if (elem.requestFullscreen) { elem.requestFullscreen(); } else if (elem.mozRequestFullScreen) { /* Firefox */ elem.mozRequestFullScreen(); } else if (elem.webkitRequestFullscreen) { /* Chrome, Safari and Opera */ elem.webkitRequestFullscreen(); } else if (elem.msRequestFullscreen) { /* IE/Edge */ elem.msRequestFullscreen(); } }; _this.closeFullscreen = function () { if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.mozCancelFullScreen) { /* Firefox */ document.mozCancelFullScreen(); } else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */ document.webkitExitFullscreen(); } else if (document.msExitFullscreen) { /* IE/Edge */ document.msExitFullscreen(); } }; /** * 监听全屏状态回调 * * @memberof FullscreenSwitch */ _this.handleListenFullScreenChange = function () { var isFullscreen = document.fullscreenElement || document.msFullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || false; _this.setState({ isFullscreen: !!isFullscreen }, function () { if (_this.props.onChange) _this.props.onChange(_this.state.isFullscreen); }); }; /** * 点击切换全屏按钮 * * @memberof FullscreenSwitch */ _this.handleToggleFullScreen = function () { var isFullscreen = _this.state.isFullscreen; var _this$props = _this.props, target = _this$props.target, onClick = _this$props.onClick; var elem = typeof target === 'string' ? document.querySelector(target) : target; if (onClick) { onClick(); } if (!isFullscreen) { _this.openFullscreen(elem); } else { _this.closeFullscreen(); } }; _this.state = { isFullscreen: false // 是否全屏 }; return _this; } var _proto = FullscreenSwitch.prototype; _proto.componentDidMount = function componentDidMount() { document.addEventListener('webkitfullscreenchange', this.handleListenFullScreenChange); document.addEventListener('mozfullscreenchange', this.handleListenFullScreenChange); document.addEventListener('fullscreenchange', this.handleListenFullScreenChange); }; _proto.componentWillUnmount = function componentWillUnmount() { document.removeEventListener('webkitfullscreenchange', this.handleListenFullScreenChange); document.removeEventListener('mozfullscreenchange', this.handleListenFullScreenChange); document.removeEventListener('fullscreenchange', this.handleListenFullScreenChange); }; _proto.render = function render() { var _cssPrefix = this.context._cssPrefix; var _this$props2 = this.props, className = _this$props2.className, local = _this$props2.local; var titleOptions = (0, _extends2["default"])({}, this.props); var isFullscreen = this.state.isFullscreen; delete titleOptions.target; delete titleOptions.local; delete titleOptions.onChange; return /*#__PURE__*/_react["default"].createElement(_title["default"], (0, _extends2["default"])({ align: "middle" }, titleOptions, { className: (0, _classnames["default"])(className, _cssPrefix + "fullscreen-switch"), onClick: this.handleToggleFullScreen }), /*#__PURE__*/_react["default"].createElement("span", { className: (0, _classnames["default"])(_cssPrefix + "iconfont-ability", { active: isFullscreen }), dangerouslySetInnerHTML: { __html: isFullscreen ? '&#xe82e;' : '&#xe82f;' } }), isFullscreen ? local.active : local["default"]); }; return FullscreenSwitch; }(_react.PureComponent); // @ts-ignore FullscreenSwitch.defaultProps = { className: null, target: null, onChange: function onChange() {}, local: { "default": '全屏模式', active: '退出全屏' }, textStyle: { fontWeight: 400 } }; FullscreenSwitch.contextType = _context["default"]; var _default = exports["default"] = FullscreenSwitch;