uni-app微信小程序——下拉多选框

article/2025/10/8 6:40:21

插件来自:select-cy - DCloud 插件市场

 

1、组件代码

<template><view class="uni-select-cy" :style="{ 'z-index': zindex }"><view class="uni-select-cy-select" :class="{ active: active }" @click.stop="handleSelect"><!-- 禁用mask --><view class="uni-disabled" v-if="disabled"></view><!-- 清空 --><view class="close-icon close-postion" v-if="realValue.length && !active && !disabled && showClearIcon"><text @click.stop="handleRemove(null)"></text></view><!-- 显示框 --><view class="uni-select-multiple" v-show="realValue.length"><view class="uni-select-multiple-item" v-for="(item, index) in realValue" :key="index">{{ item }}<view class="close-icon" v-if="showValueClear"><text @click.stop="handleRemove(index)"></text> </view></view></view><!-- 为空时的显示文案 --><view v-if="realValue.length == 0 && showplaceholder">{{ placeholder }}</view><!-- 禁用图标 --><view class="uni-select-cy-icon" :class="{ disabled: disabled }"><text></text></view></view><!-- 下拉选项 --><scroll-view class="uni-select-cy-options" :scroll-y="true" v-show="active"><template><viewclass="uni-select-cy-item":class="{ active: realValue.includes(item[svalue]) }"v-for="(item, index) in options":key="index"@click.stop="handleChange(index, item)">{{ item[slabel] }}</view></template></scroll-view></view>
</template><script>
export default {name: 'select-cy',props: {// 是否显示全部清空按钮showClearIcon: {type: Boolean,default: false,},// 是否显示单个删除showValueClear: {type: Boolean,default: true,},zindex: {type: Number,default: 999,},// 禁用组件disabled: {type: Boolean,default: false,},options: {type: Array,default() {return [];},},value: {type: Array,default() {return [];},},placeholder: {type: String,default: '请选择',},showplaceholder: {type: Boolean,default: true,},slabel: {type: String,default: 'text',},svalue: {type: String,default: 'value',},},data() {return {active: false, // 组件是否激活,changevalue: [], // 搜索框同步realValue: [],};},mounted() {// 初始化this.init();},methods: {close() {this.active = false;},init() {if (this.value.length > 0) {this.changevalue = this.options.forEach((item) => {this.value.forEach((i) => {if (item[this.svalue] === i[this.svalue]) {return item;}});});this.realValue = this.value;} else {this.changevalue = [];this.realValue = [];}},// 点击展示选项handleSelect() {if (this.disabled) return;this.active = !this.active;},// 移除数据handleRemove(index) {if (index === null) {this.realValue = [];this.changevalue = [];} else {this.realValue.splice(index, 1);this.changevalue.splice(index, 1);}this.$emit('change', this.changevalue, this.realValue);},// 点击组件列handleChange(index, item) {const arrIndex = this.realValue.indexOf(item[this.svalue]);if (arrIndex > -1) {this.changevalue.splice(arrIndex, 1);this.realValue.splice(arrIndex, 1);} else {this.changevalue.push(item);this.realValue.push(item[this.svalue]);}console.log(this.realValue, 'this.realValue');this.$emit('change', this.changevalue, this.realValue);},},
};
</script><style lang="scss" scoped>
.uni-select-cy {position: relative;z-index: 999;.uni-select-mask {width: 100%;height: 100%;}/* 删除按钮样式*/.close-icon {height: 100%;width: 20px;display: flex;align-items: center;justify-content: center;z-index: 3;cursor: pointer;text {position: relative;background: #c0c4cc;width: 13px;height: 13px;border-radius: 50%;border: 1px solid #bbb;&::before,&::after {content: '';position: absolute;left: 20%;top: 50%;height: 1px;width: 60%;transform: rotate(45deg);background-color: #909399;}&::after {transform: rotate(-45deg);}}}//所有情空的定位.close-postion {position: absolute;right: 35px;top: 0;height: 100%;width: 15px;}/* 多选盒子 */.uni-select-multiple {overflow-x: auto;display: flex;.uni-select-multiple-item {background: #f4f4f5;margin-right: 5px;padding: 2px 4px;border-radius: 4px;color: #909399;display: flex;}}// select部分.uni-select-cy-select {user-select: none;position: relative;z-index: 3;height: 36px;padding: 0 30px 0 10px;box-sizing: border-box;border-radius: 4px;border: 1px solid rgb(229, 229, 229);display: flex;align-items: center;font-size: 14px;color: #999;.uni-disabled {position: absolute;left: 0;width: 100%;height: 100%;z-index: 19;cursor: no-drop;background: rgba(255, 255, 255, 0.5);}.uni-select-cy-input {font-size: 14px;color: #999;display: block;width: 96%;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;line-height: 30px;box-sizing: border-box;&.active {color: #333;}}.uni-select-cy-icon {cursor: pointer;position: absolute;right: 0;top: 0;height: 100%;width: 30px;display: flex;align-items: center;justify-content: center;&::before {content: '';width: 1px;height: 100%;position: absolute;left: 0;top: 0;background-color: #e5e5e5;}text {display: block;width: 0;height: 0;border-width: 12rpx 12rpx 0;border-style: solid;border-color: #bbb transparent transparent;transition: 0.3s;}&.disabled {cursor: no-drop;text {width: 20rpx;height: 20rpx;border: 2px solid #ff0000;border-radius: 50%;transition: 0.3s;position: relative;z-index: 999;&::after {content: '';position: absolute;top: 50%;left: 0;width: 100%;height: 2px;margin-top: -1px;background-color: #ff0000;transform: rotate(45deg);}}}}&.active .uni-select-cy-icon {text {transform: rotate(180deg);}}}// options部分.uni-select-cy-options {user-select: none;position: absolute;top: calc(100% + 5px);left: 0;width: 100%;height: 500rpx;border-radius: 4px;border: 1px solid rgb(229, 229, 229);background: #fff;padding: 5px 0;box-sizing: border-box;z-index: 9;.uni-select-cy-item {padding: 0 10px;box-sizing: border-box;cursor: pointer;line-height: 2.5;transition: 0.3s;font-size: 14px;&.active {color: #409eff;background-color: #f5f7fa &hover {color: #409eff;background-color: #f5f7fa;}}&:hover {background-color: #f5f5f5;}}}
}
</style>

2、使用说明

## 插件使用方法:`<select-lay :value="tval" name="name" :options="datalist" @selectitem="selectitem"></select-lay>`## 配置参数:|     属性名      |  类型   | 默认值 | 说明                                             |
| :-------------: | :-----: | :----: | ------------------------------------------------ |
|  showClearIcon  | Boolean | false  | 是否显示全部清空按钮                             |
| showValueClear  | Boolean |  true  | 是否显示单个删除                                 |
|     zindex      | Number  |   ""   | 层级,默认 999,防止多个组件一起使用时下拉栏穿透 |
|     slabel      | String  |  text  | 自定义列表中键值对关系,参考示例                 |
|     svalue      | String  | value  | 自定义列表中键值对关系,该值对应 value,参考示例 |
|   placeholder   | String  | 请选择 | 无选项时展示的文字                               |
| showplaceholder | Boolean |  true  | 下拉时是否展示请选择按钮                         |
|     options     |  Array  |   无   | 数据列表                                         |
|    disabled     | Boolean | false  | 是否禁用                                         |
|      value      |  Array  |   无   | 选中值及回显                                     |## 事件:| 事件名  |            说明            | 返回值                              |
| :-----: | :------------------------: | ----------------------------------- |
| @change | 点击项目或者删除触发的事件 | 返回全量选中项及只有 value 的选中项 |## 说明:此插件依赖 scss,请务必安装!!!## 示例:```<template><view class="content"><form @submit="formSubmit"><view class="item">写法:</view><select-cy :value="tval" placeholder="请选择项目" :options="datalist" @change="change"></select-cy><select-cy :value="tval" placeholder="请选择项目1" :options="datalist" @change="change"></select-cy><button type="submit" @click="formSubmit">提交</button></form></view></template><script>export default {data() {return {//模拟数据列表datalist: [],//模拟初始数据tval: []};},onReady() {this.datalist = [{label: 'label1',value: 'value1'},{label: 'label2',value: 'value2'},{label: 'label3',value: 'value3'},{label: 'label4',value: 'value4'},{label: 'label5',value: 'value5'},{label: 'label6',value: 'value6'},{label: 'label7',value: 'value7'},{label: 'label8',value: 'value8'},{label: 'label9',value: 'value9'}];},methods: {formSubmit(e) {console.log(this.tval,'提交参数');},change(item,value) {console.log(item,value);this.tval = value;}}};</script><style lang="scss">.content {width: 300px;padding: 20px 0;margin: 0 auto;.item {margin-bottom: 10px;}.btn {margin-top: 20px;}}</style>```


http://chatgpt.dhexx.cn/article/OaSj5CN2.shtml

相关文章

微信小程序下拉框选择

wxml代码 <view classtop-selected bindtapbindShowMsg><text>{{grade_name}}</text> </view> <!-- 下拉需要显示的列表 --> <view class"select_box" wx:if"{{select}}"><view wx:for"{{grades}}" wx:…

微信小程序——自定义下拉框

微信小程序本身并没有自带的下拉框组件&#xff0c;我们可以通过view标签自定义一个下拉框。(仅供参考&#xff09; 目录 文件目录实现效果实现逻辑设置数据设置默认选项实现弹出下拉框提供选项值设置所选值 源码wxmlwxssjs 文件目录 文件的功能&#xff1a; xxx.js&#xff…

小程序如何实现下拉选项操作

wxml文件代码 <picker class"picker" mode"selector" bindchange"bindAccountChange" value"{{accountIndex}}" range-key"label"range"{{accounts}} "><view class"weui-select">{{accou…

小程序下拉列表框菜单

小程序下拉列表框菜单 <view classtop><view classtop-text> 选择班别</view><!-- 下拉框 --><view classtop-selected bindtapbindShowMsg><text>{{grade_name}}</text><image src/images/xia.png></image></view&…

微信小程序的简单下拉框组件

网上的下拉框组件都不是自己想要的于是就自己写了一个。 wxml 原代码上传竟然显示不出来&#xff0c;wxml只能截图了&#xff0c;然后是js部分 data: { dropdownData:[“综合排序”,”行政区”,”商业圈”],//下拉框的数组 selectData: [‘默认排序’, ‘距离我最近’, …

微信小程序组件 —— 树形下拉框

因为项目需求&#xff0c;需要一个树形下拉选择框&#xff0c;参考了网上的树形结构整理出了这样一个效果图 下载地址&#xff1a;wx_treeSelect下载 其实主要还是参考了treeview的递归思想 微信小程序实现简单的树形图treeview 绘制出下拉框内的内容&#xff0c;在加个状态判…

微信小程序 一个简单的select下拉框

微信小程序 一个简单的select下拉框 用的是transform过渡&#xff0c;没用动画 看看效果 废话不多说&#xff0c;直接上代码 wxml: <view class"item"><label class"first"><text>*</text>公司/商户类型&#xff1a;</labe…

微信小程序下拉选项框

效果图 test.js /*** 页面的初始数据*/data: {shows: false, //控制下拉列表的显示隐藏&#xff0c;false隐藏、true显示selectDatas: [消费账户, 平台返利账户, 微信钱包], //下拉列表的数据indexs: 0, //选择的下拉列 表下标,},// 点击下拉显示框selectTaps() {this.setDa…

微信小程序select下拉框实现。

小程序中是没有h5中的下拉 标签的 所以要实现下拉功能就必须自己动手写拉 这里为了更清楚的显示层级 就把源码直接复制过来了 <view classlist-msg><view classlist-msg1><text>商品金额</text><text>&#xffe5;99.00</text></view&…

微信小程序之select下拉框

wxml&#xff1a; <view class"classify-kuangjia"><view class"classify-kuangjia2"><view>商品分类:</view><!-- 下拉框 --><view classclassify bindtapbindShowMsg><text>{{grade_name}}</text><…

微信小程序原生的下拉框组件

前言 近日开发微信小程序时&#xff0c;需要一个下拉框的组件&#xff0c;使用和PC端下拉框一样的方式会显得很丑&#xff0c;于是发现微信官方API有个wx.showActionSheet&#xff0c;但是有诸多限制&#xff0c;例如&#xff1a;最大长度只能是6项&#xff0c;多选等等。 由…

微信小程序实现下拉菜单效果

问题 下拉菜单在各类网页&#xff0c;app或者小程序中都是比较常见的输入控件。下拉菜单的下拉选项的多少可以根据自身需求进行调节&#xff0c;常运用于时间范围选择&#xff0c;地点区域选择&#xff0c;价格区间选择&#xff0c;等等。提供下拉菜单的目的是帮助用户更快更准…

使用微信小程序做一个简易的下拉框,无动画效果,纯原生写法(下拉列表框)

最近在开发的时候&#xff0c;需要使用下拉的效果&#xff0c;但是之前并没有进行书写过&#xff0c;今天做一个简单的demo&#xff0c;来记录一下微信小程序开发的下拉框效果。 微信小程序和jquery最大的区别就是是否操作dom&#xff0c; 微信小程序无需操作dom&#xff0c;可…

微信小程序下拉选择

微信小程序中下拉框选择一般的交互方式有以下两种 直接下拉选择点击选择框后&#xff0c;弹出浮层进行选择 下边分别介绍两种方式的实现。在微信小程序中&#xff0c;这两种实现都需要修改三个文件 js 文件&#xff1a;下拉选择逻辑的具体实现 wxml 文件&#xff1a;下拉组件…

小程序——下拉选择框组件

一、效果 二、说明 最近在开发微信小程序&#xff0c;但是用的lin-ui和vant 都没有下拉选择框组件。在网上搜索一番后&#xff0c;发现了一个挺简单且很好用的下拉框组件。 链接在这里&#xff1a;https://blog.csdn.net/WeiflR10/article/details/121494131 原文中是直接写入…

微信小程序实现下拉框功能

微信小程序里没有和HTML里的下拉框一样的组件&#xff0c;想要相同的效果只能自己写一个&#xff0c;先看效果 下面来看一下代码&#xff1a; 首先WXML <view classselect_box><view classselect catchtapselectTap><text classselect_text>{{selectData[i…

小程序登录详解

小程序登录简单分为以下几步&#xff1a; 使用wx.login获取code值获取code值后再加 AppID appsecret code 传给后端后端调接口 拿到 seesion_key openid 返回 token前端存储token 小程序登录的三个角色 小程序 用户使用客户端 由于小程序运行在微信之上 因此小程序可以通过…

一个好看的小程序登录页面

文章目录 前言一、效果图二、实现代码 前言 写一个挺好看的小程序页面&#xff0c;发出来记录一下 一、效果图 登录页面&#xff1a; 注册页面&#xff1a; 通过点击注册和登录按钮切换两个页面淡入淡出效果 二、实现代码 wxml: <!--pages/login/login.wxml--> &…

微信小程序的简单登录

这种在前台直接获取openid的方式已经不可以用了&#xff0c;各位想了解新的登录请去http://blog.csdn.net/m0_37992327/article/details/73469087&#xff0c;不过下面的一些东西还是对大家有帮助的&#xff0c;有兴趣的可以看一下&#xff0c;尤其是ssl证书的申请方式。 最近…

微信小程序登录界面

软件安装 这个就不讲了&#xff0c;没安装的可以自行百度安装一下 创建小程序 点击确认后创建完成&#xff0c;然后 创建登录页 然后点击app.json&#xff0c;将pages中的路径改掉 将pages中的路径修改之后&#xff0c;直接保存&#xff0c;会自动生成login文件夹及下边的文件…