@linkdesign/screen
Version:
屏组件库,但使用场景又不局限于屏。主要用于BI、大盘和屏
141 lines (140 loc) • 5.97 kB
JavaScript
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 ? '' : ''
}
}), 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;
;