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


    效果 

    代码

    1. <template>
    2. <view>
    3. <view class="dropdown-trigger" @tap="showDropdown">
    4. {{ selectedItem }}
    5. view>
    6. <view class="dropdown-list" v-if="showList">
    7. <view class="dropdown-item" v-for="item in listData" @tap="selectItem(item)" :key="item">
    8. {{ item }}
    9. view>
    10. view>
    11. view>
    12. template>
    13. <script>
    14. export default {
    15. data() {
    16. return {
    17. showList: false, // 控制下拉列表的显示和隐藏
    18. listData: ['选项1', '选项2', '选项3'], // 下拉列表的数据
    19. selectedItem: '选项1' // 选中的下拉列表项
    20. }
    21. },
    22. methods: {
    23. showDropdown() {
    24. this.showList = !this.showList; // 切换下拉列表的显示状态
    25. },
    26. selectItem(item) {
    27. this.selectedItem = item; // 选择下拉列表项
    28. this.showList = false; // 隐藏下拉列表
    29. }
    30. }
    31. };
    32. script>
    33. <style>
    34. .dropdown-trigger{
    35. border:1px solid black;
    36. width: 250rpx;
    37. }
    38. .dropdown-list{
    39. border:1px solid black;
    40. width: 250rpx;
    41. }
    42. style>

    扩展-下拉列表位置

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

    效果

    被挤压的效果

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

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

    核心代码

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

    .dropdown-trigger { position: relative; }

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

    .dropdown-list { position: absolute;}

    完整代码

    1. <template>
    2. <view>
    3. <view class="dropdown-trigger" @tap="showDropdown">
    4. {{ selectedItem }}
    5. view>
    6. <view class="dropdown-list" v-if="showList">
    7. <view class="dropdown-item" v-for="item in listData" @tap="selectItem(item)" :key="item">
    8. {{ item }}
    9. view>
    10. view>
    11. <view>
    12. 我是内容
    13. view>
    14. view>
    15. template>
    16. <script>
    17. export default {
    18. data() {
    19. return {
    20. showList: false, // 控制下拉列表的显示和隐藏
    21. listData: ['选项1', '选项2', '选项3'], // 下拉列表的数据
    22. selectedItem: '选项1' // 选中的下拉列表项
    23. }
    24. },
    25. methods: {
    26. showDropdown() {
    27. this.showList = !this.showList; // 切换下拉列表的显示状态
    28. },
    29. selectItem(item) {
    30. this.selectedItem = item; // 选择下拉列表项
    31. this.showList = false; // 隐藏下拉列表
    32. }
    33. }
    34. };
    35. script>
    36. <style>
    37. .dropdown-trigger {
    38. border: 1px solid black;
    39. width: 250rpx;
    40. position:relative;
    41. }
    42. .dropdown-list {
    43. border: 1px solid black;
    44. width: 250rpx;
    45. position:absolute;
    46. background-color: aquamarine;
    47. }
    48. style>

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

    效果

    核心代码

    三目运算给出样式

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

    完整代码

    1. <template>
    2. <view>
    3. <view class="dropdown-trigger" @tap="showDropdown">
    4. <text>{{ selectedItem }}text>
    5. view>
    6. <view class="dropdown-list" v-if="showList">
    7. <view class="dropdown-item" v-for="item in listData" @tap="selectItem(item)" :key="item" :class="{selected: selectedItem === item}">
    8. {{ item }}
    9. view>
    10. view>
    11. <view>
    12. 我是内容
    13. view>
    14. view>
    15. template>
    16. <script>
    17. export default {
    18. data() {
    19. return {
    20. showList: false, // 控制下拉列表的显示和隐藏
    21. listData: ['选项1', '选项2', '选项3'], // 下拉列表的数据
    22. selectedItem: '选项1' // 选中的下拉列表项
    23. }
    24. },
    25. methods: {
    26. showDropdown() {
    27. this.showList = !this.showList; // 切换下拉列表的显示状态
    28. },
    29. selectItem(item) {
    30. this.selectedItem = item; // 选择下拉列表项
    31. this.showList = false; // 隐藏下拉列表
    32. }
    33. }
    34. };
    35. script>
    36. <style>
    37. .dropdown-trigger {
    38. border: 1px solid black;
    39. width: 250rpx;
    40. position:relative;
    41. }
    42. .dropdown-list {
    43. border: 1px solid black;
    44. width: 250rpx;
    45. position:absolute;
    46. background-color: aquamarine;
    47. }
    48. /* 自定义选中项的样式 */
    49. .selected {
    50. color: red;
    51. font-weight: bold;
    52. }
    53. style>

  • 相关阅读:
    77.【JavaWeb文件上传和邮件发送04】
    elmentui表单重置及出现的问题
    阿里面试官问的 Redis 太刁钻,索性整理出所有大厂的 Redis 面试题,拿下麻烦的面试官
    深度学习人体语义分割在弹幕防遮挡上的实现 - python 计算机竞赛
    【router-view】切换组件 深刻理解用法 vue的设计思想
    基于YOLOV7的openpose人体姿态检测识别,FPS可以达到“较高”的效果
    顺序表(C++实现)
    GoogleTest环境配置以及应用
    美瞳小程序经营配送商城的作用是什么
    【JavaScript】字符串true转化为Boolean类型的true
  • 原文地址:https://blog.csdn.net/weixin_46001736/article/details/133736954