uniapp微信小程序 --下拉菜单

小程序 0

  一、直接先上效果图

二、原因

就是原生写这个本来就是一件很简单的事情,但是uniapp里面不支持selct,他封装了东西应该是,插件市场试了好几个也不太行。最后还是找到一个博主的写的很好,记录一下。

三、代码

这是封装好的需要什么样式自己调整

<template>	<view class="ep-picker-box">		<!-- 蒙版区域 开始 -->		<view class="ep-mask-box" v-show="show" @click="show=false"></view>		<!-- 蒙版区域 开始 -->		<!-- 输入框区域 开始 -->		<view class="ep-input-box" @click="openOptions" :class="{'disabled':disabled}">			<view style="display: flex;align-items: center;min-height: 36px;">{{showLabel}}</view>			<text v-if="!show" class="iconfont icon-xiala"></text>			<text v-else class="iconfont icon-xialashang"></text>		</view>		<!-- 输入框区域 结束 -->		<!-- 弹出的下拉区域 开始 -->		<view v-show="show" class="ep-picker-content-wrap">			<scroll-view class="ep-picker-content" :scroll-y="true">				<!-- 展示下拉项列表 开始 -->				<view v-for="item in options" :key="item[value_key]"					:class="{'disabled':item.disabled,'active':value==item[value_key]}" class="option-item"					@click="itemClick(item)">{{item[label_key]}}</view>				<!-- 展示下拉项列表 结束 -->				<!-- 下拉列表为空 开始 -->				<view v-if="options.length==0" class="option-no-data">无数据</view>				<!-- 下拉列表为空 结束 -->			</scroll-view>			<text class="triangle"></text>		</view>		<!-- 弹出的下拉区域 结束 -->	</view></template><script>	export default {		data() {			return {				show: false,				left: 0,			}		},		props: {			value: {				type: [String, Number],				default: ""			},			options: {				type: Array,				default: function() {					return []				}			},			value_key: {				type: String,				default: "value"			},			label_key: {				type: String,				default: "label"			},			disabled: {				type: Boolean,				default: false			}		},		model: {			prop: 'value',			event: "valChange"		},		methods: {			//点击选中选项			itemClick(item) {				if (item.disabled) return				//关闭				console.log(222);				this.show = false				//修改v-model的值				this.$emit('valChange', item[this.value_key])				//将事件通知父组件				this.$emit('change', item[this.value_key])			},			//展开选项			openOptions() {				console.log(111);				if (!this.disabled) {					this.show = true				}			}		},		computed: {			showLabel() {				var index = this.options.findIndex(item => {					return item[this.value_key] == this.value				})				if (index != -1) {					return this.options[index][this.label_key]				} else if (!this.value) {					return "全部"				} else {					return this.value				}			}		}	}</script><style scoped>	/* 引入字体图标 */	/* @import './iconfont.css'; */	.ep-picker-box {		/* width:100%; */		/* box-sizing: border-box; */		position: relative;		display: flex;		align-items: center;		font-size: 24rpx;		color: #FFFFFF;		width: 130rpx;		height: 48rpx;		border-radius: 24rpx 24rpx 24rpx 24rpx;		border: 2rpx solid #FFFFFF;	}	.ep-mask-box {		position: fixed;		z-index: 999;		top: 0;		right: 0;		left: 0;		bottom: 0;		background: none;	}	.ep-input-box {		border-radius: 4px;		padding-left: 10px;		position: relative;		cursor: pointer;		width: 130rpx;	}	/* 整个下拉组件禁用样式 */	.ep-input-box.disabled {		cursor: not-allowed;		background-color: yellow;		color: #999;		border-bottom: 1px solid #000;	}	/* 展开收起箭头样式 */	.ep-input-box .iconfont {		position: absolute;		top: 50%;		right: 5px;		font-size: 20px;		transform: translateY(-50%);		color: #B8B8B8;	}	/* 下拉容器样式 外层 */	.ep-picker-content-wrap {		width: 100%;		position: absolute;		top: 55rpx;		left: 0;		z-index: 9999;		padding-top: 6px;	}	/* 下拉容器样式 内层 */	.ep-picker-content-wrap .ep-picker-content {		background-color: #fff;		color: #999;		padding: 3px 0;		box-shadow: 0 0 20px 5px rgb(0 0 0 / 30%);		border-radius: 5px;		max-height: 181px;	}	/* 下拉项通用样式 */	.ep-picker-content-wrap .ep-picker-content .option-item {		padding: 16rpx 8rpx 10rpx;		font-size: 20rpx;		cursor: pointer;		border-bottom: 1rpx solid #DFDDDD;	}	.ep-picker-content-wrap .ep-picker-content .option-item:last-child {		border-bottom: none;	}	/* 无下拉项数据时样式 */	.ep-picker-content-wrap .ep-picker-content .option-no-data {		padding: 8px 18px;		cursor: text;		color: #999;		text-align: center;	}	/* 鼠标移入下拉项样式 */	.ep-picker-content-wrap .ep-picker-content .option-item:hover {		background-color: #f5f7fa;	}	/* 已选中的下拉项样式 */	.ep-picker-content-wrap .ep-picker-content .option-item.active {		/* color: #007AFF; */	}	/* 禁用的下拉项样式 */	.ep-picker-content-wrap .ep-picker-content .option-item.disabled {		color: #c0c4cc;		border-bottom: 1px solid #000;	}	.ep-picker-content-wrap .ep-picker-content .option-item.disabled:hover {		cursor: not-allowed;	}	/* 下拉容器指示箭头样式 */	.ep-picker-content-wrap .triangle {		width: 0;		height: 0;		border-top: 6px solid rgba(0, 0, 0, 0);		border-right: 6px solid rgba(0, 0, 0, 0);		border-bottom: 6px solid #fff;		border-left: 6px solid rgba(0, 0, 0, 0);		position: absolute;		top: -6px;		left: 50%;		transform: translateX(-50%);		box-sizing: content-box;	}</style>

使用

	<view style="display: flex;justify-content: center;padding:10px;">					<epselect :disabled="false" v-model="select" :options="options" @change="change"></epselect>				</view>	data() {			return {				select:"",				options: [{					value: "1",					label: "全部"				}, {					value: "2",					label: "年"				}, {					value: "3",					label: "月",				}],}}

博主地址附上https://www.cnblogs.com/OrochiZ-/p/15910440.html

也许您对下面的内容还感兴趣: