开关优化。

This commit is contained in:
tengge1 2019-05-21 21:30:05 +08:00
parent a205a2934a
commit 83387249c1
4 changed files with 50 additions and 7 deletions

View File

@ -25,7 +25,7 @@ class Radio extends React.Component {
}
render() {
const { className, style, disabled, selected, onChange, ...others } = this.props;
const { className, style, selected, disabled, onChange, ...others } = this.props;
return <input
type={'radio'}
className={classNames('Radio',

View File

@ -1,19 +1,58 @@
import './css/Toggle.css';
import classNames from 'classnames/bind';
import PropTypes from 'prop-types';
/**
* 开关
* @author tengge / https://github.com/tengge1
* @property {String} className 样式类
* @property {Object} style 样式
* @property {Boolean} selected 是否选中
* @property {Boolean} disabled 是否禁用
*/
class Toggle extends React.Component {
constructor(props) {
super(props);
this.state = {
selected: props.selected,
};
this.handleChange = this.handleChange.bind(this, props.onChange);
}
handleChange(onChange, event) {
var selected = event.target.classList.contains('selected');
this.setState({
selected: !selected,
});
onChange && onChange(!selected, event);
}
render() {
const { className, style, selected, disabled } = this.props;
return <div className={classNames('Toggle', selected ? 'selected' : null, disabled ? 'disabled' : null, className)} style={style}></div>;
const { className, style, selected, disabled, onChange, ...others } = this.props;
return <div
className={classNames('Toggle', this.state.selected && 'selected',
disabled && 'disabled',
className)}
style={style}
onClick={disabled ? null : this.handleChange}
{...others}></div>;
}
}
Toggle.propTypes = {
className: PropTypes.string,
style: PropTypes.object,
selected: PropTypes.bool,
disabled: PropTypes.bool,
onChange: PropTypes.func,
};
Toggle.defaultProps = {
className: null,
style: null,
selected: false,
disabled: false,
onChange: null,
};
export default Toggle;

View File

@ -4,6 +4,7 @@
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEiSURBVDhP1ZPLaoNAGIVdttC+TUveqHmAEkp3br0gKCq60bfwti40BNF9kodIusrOzIFTxNYxE3d+8MOg/znM/Bdt2RiG8WxZ1krEmrHSdf2Jv+/Ddd3POI4PSZKci6K4IHCOomjved4H09TwfX9XVdWpkyDMz0EQfDN9Gpi1bUupnKZpOpG7pWwcPHPqZn/BTcXzN5QPQQNQM+YqI2p6dBznkTY96CCKzjxloLFt+5U2PRgLdJJ5yuR5fjFN8402PXMNoZEZzn6yqP8LbXqwAaIpe+Ypg6akafpAmyHYgLIslW+ZZdmP0LxTPg42AEN7i7quuzAMvyibBhuAoaX2H7iZstkv2ADUB0VHJxE449vNZ8rABmBoMRYIdFPagIWgaVdKsJshjm46QwAAAABJRU5ErkJggg==);
display: inline-block;
-webkit-appearance: none;
cursor: pointer;
}
.Radio.selected {
@ -12,6 +13,7 @@
.Radio.disabled {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEFSURBVDhP1ZNdCsIwEIT7qGBvo3gjPYCU4v0ExSOoN+ifTUvpW52hI0FJY/TNDxZLsjNsdtfovxmGIc7zfJ1l2ZbBb5wtdP0dEO/Lsrwi6qZpega/i6K44C5VWhgQnWFwRzVOjDE1TI9K90OzrusknYY5yD1J5obP9FX2DitFGxLJX8F9zJ6NqeFAc8PPXDYWTpBNH9PCoQbalWwsXIu2bXvlBcPpQ7uRjeVXQ2qchr8+uaqqGoZL2Vhwt8DlZUwLR0OZyeYVVJmiJ8FVYm0MdnEnuRuYHr9Y7INkfvgP8FWqysLMnqA3CfvDQXGSDA6AZx+fOQWKmXNpuRaKJc7cA/gTougBp8flNLlkjQ0AAAAASUVORK5CYII=);
cursor: default;
}
.Radio.selected.disabled {

View File

@ -4,6 +4,7 @@
margin: 0 4px;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAUCAYAAADoZO9yAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABYSURBVEhL7da9CQAgDIRR918gC2SBzJGhImlEzsofMMUJrz2+dDYRiQrqhZhZuPsxVV3Gd4yQHLt5ecg8vIshiCGIIYghiCGIIaheSA5lzKln34DfioRIdJ5veQfy/zjLAAAAAElFTkSuQmCC);
display: inline-block;
cursor: pointer;
}
.Toggle.selected {
@ -12,6 +13,7 @@
.Toggle.disabled {
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAUCAYAAADoZO9yAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABVSURBVEhL7dY7CgAgDERB73/VEEiTOpJGZK38gClWmHZ56WwiEhXUCzGzcPdjqrqM7xghOXbz8pB5eBdDEEMQQxBDEEMQQ1C9kBzKmFPPvgG/FQmR6IJTLfO1daX2AAAAAElFTkSuQmCC);
cursor: default;
}
.Toggle.selected.disabled {