更新记录

1.1.0(2025-07-14) 下载此版本

1.0.1(2025-01-13) 下载此版本

优化说明文挡

1.0.0(2025-01-13) 下载此版本

新增组件

查看更多

平台兼容性

uni-app

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
√ √ - - - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
√ - √ - √ - - √ - - - -

hbxw-selector 选择器组件

介绍

选择器组件,可以实现单选/多选的选择器组件,支持自定义图标、底部操作区域和关闭按钮。

使用示例

基础用法

推荐先直接复制示例代码到工程中看效果了解下使用方法再投入项目使用。

<template>
    <view>
    <button @click="selectfn(0)">单选</button>
    <button @click="selectfn(1)">多选</button>
    <button @click="selectfn(2)">slot示例</button>
        <hbxw-selector 
      v-model:isShow="isShowSlector0" 
      @picker="picker" 
      :options="options"
      @confirm="confirm0"
    ></hbxw-selector>
        <hbxw-selector 
      v-model:isShow="isShowSlector1" 
      :isMultiple="true"
      :isAni="false" 
      @picker="picker" 
      @confirm="confirm1"
      :options="options"
    ></hbxw-selector>
    <hbxw-selector 
      v-model:isShow="isShowSlector2" 
      :options="reasonOptions"
      title="请选择售后原因"
      sub-title="售后原因副标题"
    >
      <template #close>
        <view class="close-icon" mode="aspectFill">✕</view>
      </template>
      <template #footer="{ result }">
        <view class="footer-container">
          <view @click="confirm2(result)" class="confirm-btn">
            确定
          </view>
        </view>
      </template>
    </hbxw-selector>
    </view>
</template>

<script>
    const SELECT_OPTIONS = [
      {
        label: '7天无理由退款',
        value: 1
      },
      {
        label: '太贵了',
        value: 2
      },
      {
        label: '设备有问题',
        value: 3
      },
      {
        label: '不喜欢',
        value: 4
      },
      {
        label: '换货',
        value: 5
      },
      {
        label: '不想要了',
        value: 6
      },
      {
        label: '换型号',
        value: 7
      },
      {
        label: '体验流程',
        value: 8
      },
      {
        label: '其他',
        value: 9
      }
    ]
    export default {
        data() {
            return {
        options: SELECT_OPTIONS,
        reasonOptions: SELECT_OPTIONS,
                isShowSlector0: false,
                isShowSlector1: false,
        isShowSlector2: false
            }
        },
        methods: {
            picker(res) {
        console.log('---- picker ----:',  res);
      },
      confirm(res) {
        console.log('---- confirm ----:',  res);
      },
      selectfn(index) {
        this['isShowSlector'+index] = true;
      },
      confirm0(result) {
        console.log('---- confirm0 ----:', result);
        this.isShowSlector0 = false;
      },
      confirm1(result) {
        console.log('---- confirm1 ----:', result);
        this.isShowSlector1 = false;
      },
      confirm2(result) {
        console.log('---- confirm2 ----:', result);
        this.isShowSlector2 = false;
      }
    }
    }
</script>

<style>
.close-icon {
  width: 44rpx;
  height: 44rpx;
}

.select-icon {
  width: 30rpx;
  height: 30rpx;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  background: linear-gradient(to right, #C246EF, #6666EA);
  border-radius: 50%;
}

.select-iconin {
  color: white;
}

.select-icon-default {
  width: 30rpx;
  height: 30rpx;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  background-color: white;
  border-width: 1px;
  border-style: solid;
  border-color: #D2CBD4;
  border-radius: 50%;
}

.footer-container {
  width: 750rpx;
  height: 160rpx;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  background-color: white;
  box-shadow: 0px -12px 20px 0px rgba(203,203,207,0.35);
}

.confirm-btn {
  width: 694rpx;
  height: 100rpx;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
  background: linear-gradient(to right, #B34EE7, #6666E2);
  border-radius: 50rpx;
  font-size: 28rpx;
  color: white;
}
</style>

API

Props

属性名 类型 默认值 必填 说明
options Array [] 是 待选择数据,数据结构如上示例
label String 'label' 否 标准结构如上示例,但如果你想自定义label的key,可以配置此值
value String 'value' 否 标准结构如上示例,但如果你想自定义value的key,可以配置此值
isShow Boolean false 是 选择器组件显示与隐藏
title String '请选择' 否 选择器主标题
subTitle String '选择您要选择的选项' 否 选择器副标题
isMultiple Boolean false 否 是否支持多选
isMaskClick Boolean true 否 是否点击遮罩可关闭
maskOpacity Number 0.75 否 遮罩透明度配置0-1
zIndex Number 9999 否 选择器层级
isAni Boolean true 否 选择器是否需要打开关闭动效
selectIcon String 默认图标 否 自定义选中状态图标路径
isShowFooter Boolean true 否 是否显示底部确认区域

Events

事件名 说明 返回值
picker 选择器状态变化触发的事件 返回当前选择的结果,{selectIndexs:[1], selectOptions:[{label: '7天无理由退款', value: 1 }]}
confirm 点击确认按钮触发的事件 返回当前选择的结果,格式同picker事件
open 选择器打开触发的事件 无
close 选择器关闭触发的事件 无

Slots

插槽名 说明 作用域参数
close 自定义关闭按钮 无
footer 自定义底部操作区域 { result } - 当前选择结果

特性

  • 🚀 高性能:优化渲染逻辑,避免微信小程序插槽冲突问题
  • 🎨 可定制:支持自定义图标、底部操作区域、关闭按钮
  • 📱 多端兼容:完美兼容微信小程序、H5、App等平台
  • ✨ 动画效果:支持开关动画,提升用户体验
  • 🔧 灵活配置:支持单选/多选、遮罩点击关闭等多种配置

注意事项

  • 组件已经尽力向外暴露了一些自定义属性,但是面对形形色色的需求,如果通过已经暴露的配置我们无法满足需求,我们可以通过样式穿透去自定义UI,最暴力的是直接复制整个代码到自己的项目,完全自定义一个适合自已需求的
  • 包体积偏大是因为有示例图片,真正会打包到项目中的体积是很小的

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议