更新记录

1.0.2(2025-08-31) 下载此版本

1、修改uni-app x在android真机中运行bug

2、完善示例及文档

1.0.1(2025-08-26) 下载此版本

1、下拉框中搜索框添加删除

2、默认下拉内容最大尺寸修改为400rpx

3、组件样式调整

1.0.0(2025-08-24) 下载此版本

1、下拉选择框,支持uni-app、uni-app x

2、支持搜索、删除、上拉、下拉

3、支持最大高度设置、选择框、下拉内容字体大小设置、单位rpx适配大多数屏幕

4、支持自定义下拉内容

查看更多

平台兼容性

uni-app(4.21)

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

uni-app x(4.41)

Chrome Safari Android iOS 鸿蒙 微信小程序
- 5.0 - -

其他

多语言 暗黑模式 宽屏模式
× ×

写在最前面

小伙伴在使用过程中遇到任何问题或发现功能不足的地方,欢迎随时留言反馈,您的宝贵意见将帮助我持续完善插件功能,在此衷心感谢您的支持与帮助!

sjx-drop-down

一款开箱即用的uni-modules解决方案,无需手动引用即可在页面中直接调用,显著提升开发效率。

插件支持双向滑动选择(上拉/下拉)、删除操作及禁用状态,通过max-height属性精准控制下拉框最大高度,采用rpx单位实现多屏幕完美适配。

引入textField和valueField双属性配置,支持任意对象字段映射,彻底摆脱数据格式限制。

允许开发者通过插槽完全自定义下拉内容,文字大小、组件尺寸均可动态调整,轻松融入项目UI体系。

Props

字段 类型 默认值 可选值 功能描述 更新时间
localData Array [] ~ 数据源 2025-08-24
textField String text ~ text字段名 2025-08-24
valueField String value ~ value字段名 2025-08-24
value [String,Number] '' ~ 动态绑定值 2025-08-24
placeHolder String 请输入内容 ~ 搜索提示 2025-08-24
filterField String text ~ 使用该字段过滤 2025-08-24
maxHeight Number 300 ~ 单位rpx 2025-08-24
isSingleLine Boolean true true|false 是否单行显示 2025-08-24
inputFontSize Number 32 ~ 选择框文字大小,单位rpx 2025-08-24
selectorFontSize Number 32 ~ 下拉框内容文字大小 2025-08-24
isShowLine Boolean true true|false 下拉内容是否显示分隔线 2025-08-24
isShowBottom Boolean true true|false true:向下;false:向上 2025-08-24
isSelf Boolean false true|false 是否使用自定义样式 2025-08-24
disabled Boolean true true|false 是否禁用 2025-08-24
isShowSearch Boolean true true|false 是否显示搜索框 2025-08-24

Events

事件名 默认值 功能描述 更新时间
change ~ 下拉选项点击事件,提供参数text、value、item对象 2025-08-24

代码演示

下拉框

<template>
    <view class="content">
        <sjx-drop-down :local-data="arrData" textField="name" @change="change" filterField="name" :value="currentV">
        </sjx-drop-down>
    </view>
</template>

export default {
    data() {
        return {
            arrData: [],
            currentV: '444'//默认绑定值
        }
    },
    mounted() {
        // 简单模拟接口请求
        setTimeout(() => {
            this.arrData.push({
                name: '测试1',
                value: '111'
            })
            this.arrData.push({
                name: '测试2',
                value: '222'
            })
            this.arrData.push({
                name: '测试3',
                value: '333'
            })
            this.arrData.push({
                name: '测试4',
                value: '444'
            })
        }, 1000)
    },
    methods: {
        change(value, text, item) {
            console.log(value, text, item);
        }
    }
}
</script>

<style>
    .content {
        padding: 20px;
    }
</style>

自定义内容

<template>
    <view class="content">
       <sjx-drop-down ref='down' :local-data="arrData" textField="name" @change="change"                filterField="name" :value="currentV" :isSelf='true'>
            <template v-slot='{data}'>
                <view>
                    <view style="background-color: aquamarine;margin: 5px 0;" v-for="                               (item,index) in data" :key="index"
                        @click="myChange(item)">
                        {{item.name}}---{{item.value}}---{{index}}
                    </view>
                </view>
            </template>
        </sjx-drop-down>
    </view>
</template>

export default {
    data() {
        return {
            arrData: [],
            currentV: '444'//默认绑定值
        }
    },
    mounted() {
        // 简单模拟接口请求
        setTimeout(() => {
            this.arrData.push({
                name: '测试1',
                value: '111'
            })
            this.arrData.push({
                name: '测试2',
                value: '222'
            })
            this.arrData.push({
                name: '测试3',
                value: '333'
            })
            this.arrData.push({
                name: '测试4',
                value: '444'
            })
        }, 1000)
    },
    methods: {
        change(value, text, item) {
            console.log(value, text, item);
        },
        myChange(item) {
            this.$refs.down.change(item)
        },
    }
}
</script>

<style>
    .content {
        padding: 20px;
    }
</style>

uni-app x中自定义内容

<template>
    <scroll-view style="flex:1">
        <sjx-drop-down ref='down' :local-data="arrData" textField="name" @change="change" filterField="name"
            :value="currentV" :is-self="true">
            <template v-slot='{data}'>
                <view>
                    <view style="background-color: aquamarine;margin: 5px 0;"
                        v-for="(item, index) in data as Array<UTSJSONObject>" :key="index" @click='myChange(item)'>
                        {{item.name}}---{{item.value}}---{{index}}
                    </view>
                </view>
            </template>
        </sjx-drop-down>
        <view style="margin-top: 10px;">其他内容</view>
    </scroll-view>
</template>
<script lang="uts">
    export default {
        data() {
            return {
                title: 'Hello',
                arrData: [] as Array<UTSJSONObject>,
                currentV: '444'
            }
        },
        mounted() {
            // 简单模拟接口请求
            setTimeout(() => {
                this.arrData.push({
                    name: '测试1',
                    value: '111'
                })
                this.arrData.push({
                    name: '测试2',
                    value: '222'
                })
                this.arrData.push({
                    name: '测试3',
                    value: '333'
                })
                this.arrData.push({
                    name: '测试4',
                    value: '444'
                })
            }, 1000)
        },
        methods: {
            myChange(item : UTSJSONObject) {
                this.$refs.down.change(item)
            },
            change(value : string, text : string, item : UTSJSONObject) {
                console.log(value, text, item);
                this.currentV = value
            }
        }
    }
</script>

<style>
    .content {
        padding: 20px;
    }
</style>

关于我

1、如有不足或不方便的地方,请指出,我尽快完善。

2、各位小伙伴如果需要其他插件的话,请留言,我会根据实际需求及自身能力完成插件或给出建议。

谢谢大家!

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT协议