diff --git a/components/form/demo/mix.md b/components/form/demo/mix.md index 08384b7f54..2f2e0269ae 100644 --- a/components/form/demo/mix.md +++ b/components/form/demo/mix.md @@ -11,6 +11,7 @@ var Select = antd.Select; var Option = Select.Option; var InputNumber = antd.InputNumber; var Datepicker = antd.Datepicker; +var Switch = antd.Switch; function handleSelectChange(value) { @@ -44,7 +45,7 @@ React.render(
-

请填写 switch

+
diff --git a/components/switch/demo/basic.md b/components/switch/demo/basic.md new file mode 100644 index 0000000000..c369d0afb0 --- /dev/null +++ b/components/switch/demo/basic.md @@ -0,0 +1,18 @@ +# 基本用法 + +- order: 0 + +简单的 switch。 + +--- + +````jsx +var Switch = antd.Switch; +var container = document.getElementById('components-switch-demo-basic'); + +function onChange(checked){ + console.log('switch to ' + checked); +} + +React.render(, container); +```` diff --git a/components/switch/index.jsx b/components/switch/index.jsx index e69de29bb2..b4e8f54d99 100644 --- a/components/switch/index.jsx +++ b/components/switch/index.jsx @@ -0,0 +1,15 @@ +var Switch = require('rc-switch'); +var React = require('react'); + +var AntSwitch = React.createClass({ + getDefaultProps() { + return { + prefixCls: 'ant-switch' + }; + }, + render() { + return ; + } +}); + +module.exports = AntSwitch; diff --git a/components/switch/index.md b/components/switch/index.md index 9e78b5da82..73647b67e6 100644 --- a/components/switch/index.md +++ b/components/switch/index.md @@ -11,3 +11,13 @@ - 需要表示开关状态/两种状态之间的切换时; - 和 `checkbox `的区别是,切换 `switch` 会直接触发状态改变,而 `checkbox` 一般用于状态标记,需要和提交操作配合。 + +## API + +### Switch + +| 参数 | 说明 | 类型 | 可选值 |默认值 | +|-----------|------------------------------------------|------------|-------|--------| +| checked | 指定当前是否选中 | boolean | | false | +| defaultChecked | 初始是否选中 | boolean | | false | +| onChange | 变化时回调函数 | Function(checked:boolean) | | | \ No newline at end of file diff --git a/index.js b/index.js index 5e640ea77e..b469467007 100644 --- a/index.js +++ b/index.js @@ -14,7 +14,8 @@ var antd = { Popconfirm: require('./components/popconfirm'), confirm: require('./components/modal/confirm'), Steps: require('./components/steps'), - InputNumber: require('./components/input-number') + InputNumber: require('./components/input-number'), + Switch: require('./components/switch') }; module.exports = antd; diff --git a/package.json b/package.json index 4019050ab2..7a6734ec76 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,9 @@ "rc-progress": "~1.0.0", "rc-select": "~4.0.0", "rc-steps": "~1.1.3", + "rc-switch": "~1.1.0", "rc-tabs": "~5.1.0", - "rc-tooltip": "~2.3.0" + "rc-tooltip": "~2.4.0" }, "devDependencies": { "css-animation": "~1.0.3", diff --git a/style/components/index.less b/style/components/index.less index 5729dcb2f9..2b88bf6cae 100644 --- a/style/components/index.less +++ b/style/components/index.less @@ -1,4 +1,5 @@ @import "button"; +@import "switch"; @import "dropdown"; @import "progress"; @import "select"; diff --git a/style/components/switch.less b/style/components/switch.less new file mode 100644 index 0000000000..21a61b80e9 --- /dev/null +++ b/style/components/switch.less @@ -0,0 +1,94 @@ +@switchPrefixCls:ant-switch; + +.@{switchPrefixCls}{ + position: relative; + display: inline-block; + width: 38px; + height: 20px; + line-height: 20px; + vertical-align: middle; + border-radius: 20px 20px; + border: 1px solid #bcbcbc; + background-color: #bcbcbc; + cursor: pointer; + transition: all 0.3s cubic-bezier(0.35, 0, 0.25, 1); + + &:after{ + display: block; + position: absolute; + top: -1px; + left: -1px; + width: 20px; + height: 20px; + border-radius: 50% 50%; + background-color: #ffffff; + content: " "; + cursor: pointer; + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.26); + transform: scale(1); + transition: left 0.3s cubic-bezier(0.35, 0, 0.25, 1); + animation-timing-function: cubic-bezier(0.35, 0, 0.25, 1); + animation-duration: 0.3s; + animation-name: rcSwitchOff; + } + + &:hover:after{ + transform: scale(1.1); + animation-name: rcSwitchOn; + } + + &-checked{ + border: 1px solid #64b6f7; + background-color: #64b6f7; + + &:after{ + left: 18px; + } + } + + &-disabled{ + cursor: no-drop; + + &:after{ + background: #9e9e9e; + animation-name: none; + cursor: no-drop; + } + + &:hover:after{ + transform: scale(1); + animation-name: none; + } + } + + &-label { + display: inline-block; + line-height: 20px; + font-size: 14px; + padding-left: 10px; + vertical-align: middle; + white-space: normal; + pointer-events: none; + user-select: text; + } +} + +@keyframes rcSwitchOn { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.25); + } + 100% { + transform: scale(1.1); + } +} +@keyframes rcSwitchOff { + 0% { + transform: scale(1.1); + } + 100% { + transform: scale(1); + } +}