采用uniapp-vue3实现, 是一款支持高度自定义的按钮组组件,支持H5、微信小程序(其他小程序未测试过,可自行尝试)
可到插件市场下载尝试: https://ext.dcloud.net.cn/plugin?id=15012
- 使用示例
<template>
<view>
<view class="name">按钮组组件: wo-btn-group</view>
<view class="card">
<view class="header">默认样式(包括disabled禁用):</view>
<view class="content">
<woBtnGroup :default-value="state.value" @change="onChange"></woBtnGroup>
</view>
</view>
<view class="card">
<view class="header">按钮形状:椭圆(默认)、方形、圆形</view>
<view class="content">
<view class="box">
<view class="title">默认椭圆:</view>
<woBtnGroup :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box">
<view class="title">方形:</view>
<woBtnGroup :shape="'space'" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box">
<view class="title">圆形(圆形无边框):</view>
<woBtnGroup :shape="'round'" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
</view>
</view>
<view class="card">
<view class="header">轮廓:</view>
<view class="content">
<view class="box">
<woBtnGroup outline :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box">
<woBtnGroup outline :shape="'space'" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box">
<woBtnGroup outline :shape="'round'" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
</view>
</view>
<view class="card">
<view class="header">自定义颜色:</view>
<view class="content">
<view class="box">
<woBtnGroup outline :color="'orange'" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box">
<woBtnGroup :color="'orange'" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
</view>
</view>
<view class="card">
<view class="header">自定义边框:</view>
<view class="content">
<view class="box">
<view class="title">无边框:</view>
<woBtnGroup :border-obj="state.borderStyle1" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box">
<view class="title">虚线边框:</view>
<woBtnGroup outline :border-obj="state.borderStyle2" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box">
<view class="title">圆角幅度:</view>
<woBtnGroup outline :border-obj="state.borderStyle3" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box">
<view class="title">边框宽度:</view>
<woBtnGroup :border-obj="state.borderStyle4" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
</view>
</view>
<view class="card">
<view class="header">自定义暗黑模式:</view>
<view class="content">
<view class="box dark1">
<woBtnGroup :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box dark1">
<woBtnGroup :shape="'round'" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box dark dark-border">
<woBtnGroup :shape="'round'" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box dark dark-border">
<woBtnGroup :border-obj="state.borderStyle1" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box dark dark-border1">
<woBtnGroup :shape="'space'" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
<view class="box dark dark-border1">
<woBtnGroup :border-obj="state.borderStyle1" :shape="'space'" :default-value="state.value" :options="state.options" @change="onChange"></woBtnGroup>
</view>
</view>
</view>
</view>
</template>
<script setup lang="ts">
import woBtnGroup from './woBtnGroup.vue'
import { reactive } from 'vue';
const state = reactive({
borderStyle1: {
isShow: false,
size: '4rpx',
style: 'dashed',
radius: '70rpx'
},
borderStyle2: {
isShow: true,
size: '4rpx',
style: 'dashed',
radius: '70rpx'
},
borderStyle4: {
isShow: true,
size: '12rpx',
style: 'solid',
radius: '70rpx'
},
borderStyle3: {
isShow: true,
size: '4rpx',
style: 'solid',
radius: '16rpx'
},
value: 1,
options: [
{
label: '按钮1',
value: 1,
},
{
label: '按钮2',
value: 2,
disabled: true
},
{
label: '按钮3',
value: 3,
},
{
label: '按钮4',
value: 4,
},
{
label: '按钮5',
value: 5,
},
],
});
const onChange = (e: any) => {
console.log('点击按钮:', e);
};
</script>
<style scoped>
.flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.name {
font-weight: bold;
padding: 40rpx 0 10rpx 20rpx;
}
.title {
padding-bottom: 10rpx;
}
.box {
margin: 20rpx
}
.dark1 {
background-color: black;
color: #fff;
border-radius: 70rpx;
}
.dark {
background-color: black;
color: #fff;
}
.dark-border {
padding: 10rpx;
border-radius: 70rpx;
border: 6rpx solid #3370FF;
}
.dark-border1 {
padding: 10rpx;
border: 6rpx solid #3370FF;
}
.card {
background: #f1f1f1;
margin: 40rpx 10rpx;
padding: 30rpx;
border-radius: 12rpx;
}
.header {
font-size: 26rpx;
display: flex;
align-items: center;
margin-bottom: 30rpx;
}
.content {
font-size: 24rpx;
/* padding-bottom: 20rpx; */
/* background-color: black; */
/* color: #fff; */
}
/* .btn-border {
font-size: 28rpx;
border: 4rpx solid #3370FF;
padding: 4rpx;
border-radius: 70rpx;
} */
</style>