zent
Version:
一套前端设计语言和基于React的实现
225 lines (191 loc) • 7.14 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
var _inherits2 = require('babel-runtime/helpers/inherits');
var _inherits3 = _interopRequireDefault(_inherits2);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _portal = require('../portal');
var _portal2 = _interopRequireDefault(_portal);
var _icon = require('../icon');
var _icon2 = _interopRequireDefault(_icon);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
// 有关闭按钮的时候同时具有ESC关闭的行为
var withNonScrollable = _portal2['default'].withNonScrollable,
withESCToClose = _portal2['default'].withESCToClose;
var ImagePortal = withNonScrollable(_portal2['default']);
var ImagePortalESCToClose = withESCToClose(ImagePortal);
var _ref2 = _react2['default'].createElement(_icon2['default'], { type: 'close' });
var Image = function (_Component) {
(0, _inherits3['default'])(Image, _Component);
function Image() {
var _ref;
var _temp, _this, _ret;
(0, _classCallCheck3['default'])(this, Image);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = (0, _possibleConstructorReturn3['default'])(this, (_ref = Image.__proto__ || Object.getPrototypeOf(Image)).call.apply(_ref, [this].concat(args))), _this), _this.state = {
imageIndex: _this.props.index || 0,
imageStyle: {},
rotateIndex: 0
}, _this.onMaskClick = function (e) {
if (e.target === e.currentTarget) {
_this.props.onClose();
}
}, _this.onClose = function () {
_this.props.onClose();
}, _this.handleRotate = function () {
var rotateIndex = _this.state.rotateIndex;
var deg = 90 + rotateIndex * 90;
rotateIndex++;
_this.setState({
imageStyle: {
transform: 'rotate(' + deg + 'deg)',
transitionDuration: '0.5s'
},
rotateIndex: rotateIndex
});
}, _this.handlePreviousAction = function () {
var imagesNum = _this.props.images.length;
var imageIndex = _this.state.imageIndex;
imageIndex = (imageIndex - 1 + imagesNum) % imagesNum;
_this.setState({
imageIndex: imageIndex,
imageStyle: {
transform: 'rotate(0deg)'
},
rotateIndex: 0
});
}, _this.handleNextAction = function () {
var imagesNum = _this.props.images.length;
var imageIndex = _this.state.imageIndex;
imageIndex = (imageIndex + 1) % imagesNum;
_this.setState({
imageIndex: imageIndex,
imageStyle: {
transform: 'rotate(0deg)'
},
rotateIndex: 0
});
}, _temp), (0, _possibleConstructorReturn3['default'])(_this, _ret);
}
(0, _createClass3['default'])(Image, [{
key: 'render',
value: function render() {
var _this2 = this;
var _props = this.props,
images = _props.images,
prefix = _props.prefix,
showRotateBtn = _props.showRotateBtn,
className = _props.className;
return _react2['default'].createElement(
ImagePortalESCToClose,
{
visible: true,
onClose: this.onClose,
className: (0, _classnames2['default'])(prefix + '-image-p-anchor', className)
},
_react2['default'].createElement(
'div',
{ className: prefix + '-image-p-backdrop' },
_react2['default'].createElement(
'div',
{ className: prefix + '-image-p-wrap', onClick: this.onMaskClick },
_react2['default'].createElement(
'div',
{ className: prefix + '-image-p-close', onClick: this.onClose },
_ref2
),
_react2['default'].createElement(
'div',
{ className: prefix + '-image-p-body' },
images.map(function (image, index) {
if (index === _this2.state.imageIndex) {
return _react2['default'].createElement('img', {
className: prefix + '-show-image',
style: _this2.state.imageStyle,
src: image,
key: index,
alt: '\u56FE\u7247\u4E0B\u8F7D\u5931\u8D25'
});
}
return null;
})
),
images.length > 1 ? _react2['default'].createElement(
'div',
{
className: prefix + '-image-p-footer image-p-footer-paging ' + (showRotateBtn ? 'show-rotate-btn' : '')
},
_react2['default'].createElement(
'span',
{
className: prefix + '-image-p-action',
onClick: this.handlePreviousAction
},
'\u4E0A\u4E00\u5F20'
),
showRotateBtn && _react2['default'].createElement(
'span',
{
className: prefix + '-image-p-action',
onClick: this.handleRotate
},
'\u7FFB\u8F6C'
),
_react2['default'].createElement(
'span',
{
className: prefix + '-image-p-action',
onClick: this.handleNextAction
},
'\u4E0B\u4E00\u5F20'
)
) : _react2['default'].createElement(
'div',
{
className: prefix + '-image-p-footer ' + (showRotateBtn ? 'show-rotate-btn' : '')
},
showRotateBtn && _react2['default'].createElement(
'span',
{
className: prefix + '-image-p-action rotate-action',
onClick: this.handleRotate
},
'\u7FFB\u8F6C'
)
)
)
)
);
}
}]);
return Image;
}(_react.Component);
Image.propTypes = {
className: _propTypes2['default'].string,
prefix: _propTypes2['default'].string,
showRotateBtn: _propTypes2['default'].bool,
images: _propTypes2['default'].array,
index: _propTypes2['default'].number
};
Image.defaultProps = {
className: '',
prefix: 'zent',
showRotateBtn: true,
images: [],
index: 0
};
exports['default'] = Image;