+
@@ -16,11 +23,23 @@ export default create({
props: {
value: Boolean,
loading: Boolean,
- disabled: Boolean
+ disabled: Boolean,
+ size: {
+ type: String,
+ default: '30px'
+ }
+ },
+
+ computed: {
+ style() {
+ return {
+ fontSize: this.size
+ };
+ }
},
methods: {
- toggleState() {
+ onClick() {
if (!this.disabled && !this.loading) {
this.$emit('input', !this.value);
this.$emit('change', !this.value);
diff --git a/packages/vant-css/src/switch.css b/packages/vant-css/src/switch.css
index a1341b945..bc75c88aa 100644
--- a/packages/vant-css/src/switch.css
+++ b/packages/vant-css/src/switch.css
@@ -1,59 +1,44 @@
@import './common/var.css';
.van-switch {
- height: 33px;
- width: 53px;
+ height: 1em;
+ width: 1.6em;
display: inline-block;
position: relative;
background: $white;
border-radius: 16px;
- box-sizing: border-box;
+ box-sizing: content-box;
border: 1px solid rgba(0, 0, 0, .1);
- border-radius: 32px;
+ border-radius: 1em;
&__node {
- width: 30px;
- height: 30px;
- border-radius: 13.5px;
- background-color: $white;
- position: absolute;
- box-shadow: 0 3px 1px 0 rgba(0, 0, 0, .05), 0 2px 2px 0 rgba(0, 0, 0, .1), 0 3px 3px 0 rgba(0, 0, 0, .05);
- left: 0;
top: 0;
- z-index: 2;
- transition: transform .3s;
-
- &::after {
- border-color: rgba(0, 0, 0, .1);
- border-radius: 27px;
- }
+ left: 0;
+ z-index: 1;
+ width: 1em;
+ height: 1em;
+ transition: .3s;
+ position: absolute;
+ border-radius: 100%;
+ background-color: $white;
+ box-shadow: 0 3px 1px 0 rgba(0, 0, 0, .05), 0 2px 2px 0 rgba(0, 0, 0, .1), 0 3px 3px 0 rgba(0, 0, 0, .05);
}
&__loading {
- top: 50%;
- left: 50%;
- width: 16px;
- height: 16px;
- transform: translate3d(-50%, -50%, 0);
+ top: 25%;
+ left: 25%;
+ width: 50%;
+ height: 50%;
}
&--on {
background-color: #44db5e;
- &::after {
- border-color: #44db5e;
- }
-
.van-switch__node {
- transform: translateX(21px);
+ transform: translateX(.6em);
}
}
- &--off {
- background-color: $white;
- border-color: rgba(0, 0, 0, .1);
- }
-
&--disabled {
opacity: .4;
}
diff --git a/test/specs/switch-cell.spec.js b/test/specs/switch-cell.spec.js
index edfaee56a..cffb11826 100644
--- a/test/specs/switch-cell.spec.js
+++ b/test/specs/switch-cell.spec.js
@@ -15,7 +15,7 @@ describe('SwitchCell', () => {
DOMChecker(wrapper, {
count: {
- '.van-switch--off': 1,
+ '.van-switch--on': 0,
'.van-switch--disabled': 0
}
});
@@ -34,7 +34,7 @@ describe('SwitchCell', () => {
'.van-cell__text': '测试标题'
},
count: {
- '.van-switch--off': 1,
+ '.van-switch--on': 0,
'.van-switch--disabled': 0
}
});
@@ -66,7 +66,7 @@ describe('SwitchCell', () => {
DOMChecker(wrapper, {
count: {
- '.van-switch--off': 1,
+ '.van-switch--on': 0,
'.van-switch--disabled': 1
}
});
diff --git a/test/specs/switch.spec.js b/test/specs/switch.spec.js
index 44ee52edb..e8bf85af4 100644
--- a/test/specs/switch.spec.js
+++ b/test/specs/switch.spec.js
@@ -20,17 +20,6 @@ describe('Switch', () => {
expect(wrapper.hasClass('van-switch--on')).to.be.true;
});
- it('create off switch', () => {
- wrapper = mount(Switch, {
- propsData: {
- value: false
- }
- });
-
- expect(wrapper.hasClass('van-switch')).to.be.true;
- expect(wrapper.hasClass('van-switch--off')).to.be.true;
- });
-
it('create loading switch', () => {
wrapper = mount(Switch, {
propsData: {
@@ -75,9 +64,9 @@ describe('Switch', () => {
}
});
- expect(wrapper.hasClass('van-switch--off')).to.be.true;
+ expect(wrapper.hasClass('van-switch--on')).to.be.false;
wrapper.trigger('click');
- expect(wrapper.hasClass('van-switch--off')).to.be.true;
+ expect(wrapper.hasClass('van-switch--on')).to.be.false;
});
it('click should toggle the switch', () => {
@@ -91,7 +80,7 @@ describe('Switch', () => {
wrapper.vm.value = val;
});
- expect(wrapper.hasClass('van-switch--off')).to.be.true;
+ expect(wrapper.hasClass('van-switch--on')).to.be.false;
wrapper.trigger('click');
expect(wrapper.hasClass('van-switch--on')).to.be.true;
});