小程序
小游戏
企业微信
微信支付
自定义的switch组件,带文字状态的开关。
文字内容、组件大小可以自定义修改。
https://developers.weixin.qq.com/s/W5xmJZmo7XNK
<mp-switch bindchange="change" trueText="打开" falseText="关闭"></mp-switch>
1 个评论
加粗
标红
插入代码
插入链接
插入图片
上传视频
<!--components/mp-switch/mp-switch.wxml--> <view class="mp-switch" style="--mp-switch-width: {{width}}px;--mp-switch-height: {{height}}px;--mp-switch-text: '{{checked?trueText:falseText}}';"> <view class="wx-switch-input {{checked?'wx-switch-input-checked':''}}" bind:tap="onChange"></view> </view>
// components/mp-switch/mp-switch.js Component({ properties: { trueText: { type: String, value: '开' }, falseText: { type: String, value: '关' }, checked: { type: Boolean, value: false }, width: { type: Number, value: 72 }, height: { type: Number, value: 32 } }, methods: { onChange() { this.setData({ checked: !this.data.checked }, () => { this.triggerEvent('change', { value: this.data.checked }) }) } } })
/* components/mp-switch/mp-switch.wxss */ .mp-switch .wx-switch-input { -webkit-appearance: none; appearance: none; position: relative; width: var(--mp-switch-width); height: var(--mp-switch-height); border: 1px solid #DFDFDF; outline: 0; border-radius: calc(var(--mp-switch-height) / 2); box-sizing: border-box; background-color: #e5e5e5; transition: background-color 0.1s, border 0.1s; } .mp-switch .wx-switch-input::before { content: var(--mp-switch-text); position: absolute; top: 0; left: 0; width: calc(var(--mp-switch-width) - 2px); height: calc(var(--mp-switch-height) - 2px); line-height: calc(var(--mp-switch-height) - 2px); font-size: calc(var(--mp-switch-height) / 2.2); padding-left: calc(var(--mp-switch-height)); padding-right: 6px; box-sizing: border-box; overflow: hidden; color: #999; text-align: center; background-color: transparent; } .mp-switch .wx-switch-input::after { content: " "; position: absolute; top: 0; left: 0; width: calc(var(--mp-switch-height) - 2px); height: calc(var(--mp-switch-height) - 2px); border-radius: 50%; background-color: #FFFFFF; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); transition: -webkit-transform 0.3s; transition: transform 0.3s; } .mp-switch .wx-switch-input.wx-switch-input-checked { border-color: #07C160; background-color: #07C160; } .mp-switch .wx-switch-input.wx-switch-input-checked::before { color: #fff; padding-right: calc(var(--mp-switch-height)); padding-left: 6px; } .mp-switch .wx-switch-input.wx-switch-input-checked::after { -webkit-transform: translateX(calc(var(--mp-switch-width) - var(--mp-switch-height))); transform: translateX(calc(var(--mp-switch-width) - var(--mp-switch-height))); }
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
<!--components/mp-switch/mp-switch.wxml--> <view class="mp-switch" style="--mp-switch-width: {{width}}px;--mp-switch-height: {{height}}px;--mp-switch-text: '{{checked?trueText:falseText}}';"> <view class="wx-switch-input {{checked?'wx-switch-input-checked':''}}" bind:tap="onChange"></view> </view>
// components/mp-switch/mp-switch.js Component({ properties: { trueText: { type: String, value: '开' }, falseText: { type: String, value: '关' }, checked: { type: Boolean, value: false }, width: { type: Number, value: 72 }, height: { type: Number, value: 32 } }, methods: { onChange() { this.setData({ checked: !this.data.checked }, () => { this.triggerEvent('change', { value: this.data.checked }) }) } } })
/* components/mp-switch/mp-switch.wxss */ .mp-switch .wx-switch-input { -webkit-appearance: none; appearance: none; position: relative; width: var(--mp-switch-width); height: var(--mp-switch-height); border: 1px solid #DFDFDF; outline: 0; border-radius: calc(var(--mp-switch-height) / 2); box-sizing: border-box; background-color: #e5e5e5; transition: background-color 0.1s, border 0.1s; } .mp-switch .wx-switch-input::before { content: var(--mp-switch-text); position: absolute; top: 0; left: 0; width: calc(var(--mp-switch-width) - 2px); height: calc(var(--mp-switch-height) - 2px); line-height: calc(var(--mp-switch-height) - 2px); font-size: calc(var(--mp-switch-height) / 2.2); padding-left: calc(var(--mp-switch-height)); padding-right: 6px; box-sizing: border-box; overflow: hidden; color: #999; text-align: center; background-color: transparent; } .mp-switch .wx-switch-input::after { content: " "; position: absolute; top: 0; left: 0; width: calc(var(--mp-switch-height) - 2px); height: calc(var(--mp-switch-height) - 2px); border-radius: 50%; background-color: #FFFFFF; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); transition: -webkit-transform 0.3s; transition: transform 0.3s; } .mp-switch .wx-switch-input.wx-switch-input-checked { border-color: #07C160; background-color: #07C160; } .mp-switch .wx-switch-input.wx-switch-input-checked::before { color: #fff; padding-right: calc(var(--mp-switch-height)); padding-left: 6px; } .mp-switch .wx-switch-input.wx-switch-input-checked::after { -webkit-transform: translateX(calc(var(--mp-switch-width) - var(--mp-switch-height))); transform: translateX(calc(var(--mp-switch-width) - var(--mp-switch-height))); }