当前位置: 首页 > news >正文

uni-app:实现简易自定义下拉列表

效果 

代码

<template><view><view class="dropdown-trigger" @tap="showDropdown">{{ selectedItem }}</view><view class="dropdown-list" v-if="showList"><view class="dropdown-item" v-for="item in listData" @tap="selectItem(item)" :key="item">{{ item }}</view></view></view>
</template><script>
export default {data() {return {showList: false, // 控制下拉列表的显示和隐藏listData: ['选项1', '选项2', '选项3'], // 下拉列表的数据selectedItem: '选项1' // 选中的下拉列表项}},methods: {showDropdown() {this.showList = !this.showList; // 切换下拉列表的显示状态},  selectItem(item) {this.selectedItem = item; // 选择下拉列表项this.showList = false; // 隐藏下拉列表}}
};
</script>
<style>.dropdown-trigger{border:1px solid black;width: 250rpx;}.dropdown-list{border:1px solid black;width: 250rpx;}
</style>

扩展-下拉列表位置

如果下拉列表下方有内容,当下拉列表的内容出现时,会造成下拉列表占据一定的高度,将内容挤压至下拉列表的下方(正常是下拉列表的内容可以覆盖内容,而不占据一定高度)

效果

被挤压的效果

 正常效果:由于没设置背景色,现在看着就是这样的效果

更换背景色就展示出希望得到的效果

核心代码

一、在需要出现下拉列表的元素上设置相对定位(position: relative),用于作为下拉列表的参考位置。

.dropdown-trigger { position: relative; }

二、下拉列表使用绝对定位(position: absolute),并设置top或bottom属性来控制其在参考元素上方或下方的位置。

.dropdown-list { position: absolute;}

完整代码

<template><view><view class="dropdown-trigger" @tap="showDropdown">{{ selectedItem }}</view><view class="dropdown-list" v-if="showList"><view class="dropdown-item" v-for="item in listData" @tap="selectItem(item)" :key="item">{{ item }}</view></view><view>我是内容</view></view>
</template><script>export default {data() {return {showList: false, // 控制下拉列表的显示和隐藏listData: ['选项1', '选项2', '选项3'], // 下拉列表的数据selectedItem: '选项1' // 选中的下拉列表项}},methods: {showDropdown() {this.showList = !this.showList; // 切换下拉列表的显示状态},selectItem(item) {this.selectedItem = item; // 选择下拉列表项this.showList = false; // 隐藏下拉列表}}};
</script>
<style>.dropdown-trigger {border: 1px solid black;width: 250rpx;position:relative;}.dropdown-list {border: 1px solid black;width: 250rpx;position:absolute;background-color: aquamarine;}
</style>

扩展-下拉列表选中颜色改变

效果

核心代码

三目运算给出样式

:class="{selected: selectedItem === item}"

完整代码

<template><view><view class="dropdown-trigger" @tap="showDropdown"><text>{{ selectedItem }}</text></view><view class="dropdown-list" v-if="showList"><view class="dropdown-item" v-for="item in listData" @tap="selectItem(item)" :key="item" :class="{selected: selectedItem === item}">{{ item }}</view></view><view>我是内容</view></view>
</template><script>export default {data() {return {showList: false, // 控制下拉列表的显示和隐藏listData: ['选项1', '选项2', '选项3'], // 下拉列表的数据selectedItem: '选项1' // 选中的下拉列表项}},methods: {showDropdown() {this.showList = !this.showList; // 切换下拉列表的显示状态},selectItem(item) {this.selectedItem = item; // 选择下拉列表项this.showList = false; // 隐藏下拉列表}}};
</script>
<style>.dropdown-trigger {border: 1px solid black;width: 250rpx;position:relative;}.dropdown-list {border: 1px solid black;width: 250rpx;position:absolute;background-color: aquamarine;}/* 自定义选中项的样式 */.selected {color: red;font-weight: bold;}
</style>

http://www.lryc.cn/news/188847.html

相关文章:

  • 排序算法——直接插入排序
  • 手动抄表和自动抄表优缺点对比
  • HiSilicon352 android9.0 emmc添加新分区
  • networkX-04-查找k短路
  • Linux虚拟机搭建RabbitMQ集群
  • C之fopen/fclose/fread/fwrite/flseek
  • 3D机器视觉:解锁未来的立体视野
  • 大端字节序存储 | 小端字节序存储介绍
  • ASP.Core3.1 WebAPI 发布到IIS
  • MyBatisPlus属性自动填充和乐观锁插件+查询删除操作+整合SpringBoot出现问题解决
  • 软件测试/测试开发丨App自动化—CSS 定位与原生定位
  • c语言:通讯录管理系统(文件版本)
  • Android Studio 配置Git SVN忽略文件
  • 独享IP地址的层级划分和管理:打造稳定高效的网络架构
  • js中async的作用
  • 什么是信创测试?信创测试工具有哪些?
  • 健康医疗类APP在高需求快速发展背景下,商业化如何快速破局增收?
  • java开源商城免费搭建 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城
  • k8spod就绪检查失败
  • 【数据结构】链表详解
  • STM32使用HAL库驱动DS18B20
  • echarts折线图设置背景颜色
  • spring boot+ vue+ mysql开发的一套厘米级高精度定位系统源码
  • 【初试396分】西北工业大学827学长经验分享
  • 【Qt之信号和槽】对象多层嵌套后,高效使用信号和槽
  • 搬砖日记:vue2 用require引入图片项目编译失败
  • 国内外都可以使用的【免费AI工具】,实用性满满
  • 银河麒麟服务器x86安装ntp客户端,并配置成功可以同步时间
  • vue踩的坑:属性报undefined错误问题汇总
  • Ubuntu22.04.3安装教程