众所周知,支付宝小程序的 switch安卓与IOS都是不同的样式,安卓为长方形的,而ios是带圆角的
为了应付设计小姐姐,当然也是为了解决这一问题,我们又得出来自己造。
组件布局:
<import-sjs name="parse" from="./parse.sjs" /> <view class="qts-class qts-switch {{parse.setSize(size)}} {{parse.setCurrent(value)}}" onTap="toggle"> <input type="text" name="name" value="{{value}}" class="qts-switch-hide-input"></input> <view class="qts-switch-inner" a:if="{{value}}"> <slot name="open"></slot> </view> <view class="qts-switch-inner" a:else> <slot name="close"></slot> </view> </view>
至于SJS就不赘述,文档可以查到。
parse.sjs
var sizes = ["large", "small", "default"]; var prefixCls = "qts-switch"; var setSize = function (size) { var index = sizes.indexOf(size); return prefixCls + (index > -1 ? ('-' + size) : 'default') } var setCurrent = function (value) { var className = value ? prefixCls + "-checked" : ""; return className; }; export default { setSize, setCurrent };
开放两个属性,一个当前的value,一个size样式大小。
Component({ props: { value: false, size: 'default' // large、small、default }, didMount() { this.setData({ value: this.props.value }) }, didUpdate() { this.setData({ value: this.props.value }) }, data: { value: false }, methods: { toggle() { const value = this.data.value ? false : true; this.props.onChange({ value }); } } })
最后附上代码片段:
https://pen.mini-code.com/s/eb149907-0bb6-4e86-8707-357abdf594d2