PHP技术论坛

搜索
查看: 1066|回复: 0
打印 上一主题 下一主题

微信小程序下拉菜单

[复制链接]

83

主题

88

帖子

411

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
411
跳转到指定楼层
楼主
发表于 2021-1-28 17:13:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
wxml代码:


  1. <!-- 下拉菜单 -->
  2.     <view class='menu-po'>
  3.         <!-- 导航栏 -->
  4.         <view class='menu'>
  5.             <view class='menu-list'>
  6.                 <view class='menu-nav' wx:for="{{ msgList }}" wx:for-index="idx" wx:key="key" data-hi="{{ idx }}"            bindtap="menuClick">
  7.                     <text class='menu-text'>{{ item.name }}</text>
  8.                     <image class='menu-image' src='/images/san1.png'></image>
  9.                 </view>
  10.             </view>
  11.         </view>
  12.         <!-- 列表栏 -->
  13.         <view class='menu-if'>
  14.             <view class="meun-txt" hidden='{{ meunShow[0].isShows ? true : false }}'>
  15.                 <view class='menu-text-list'>
  16.                     <view class='menu-text-list-left over-auto'>
  17.                         <text wx:for="{{ areaLise }}" wx:key="name" class='meun-city-txt' bindtap="rowClick"  data-hi="{{ index }}">{{ item.name }}</text>
  18.                     </view>
  19.                     <view class='menu-text-list-rig over-auto' hidden='{{ rigShow ? true : fasle }}'>
  20.                         <view class='menu-city' hidden='{{ rowShow[0].isShows ? true : fasle }}'>
  21.                             <text wx:for="{{ rowLise.row_weiyang.name }}" wx:key="item" class='meun-city-txt'>{{ item }}</text>
  22.                         </view>
  23.                         <view class='menu-city' hidden='{{ rowShow[1].isShows ? true : fasle }}'>
  24.                             <text wx:for="{{ rowLise.row_beilin.name }}" wx:key="item" class='meun-city-txt'>{{ item }}</text>
  25.                         </view>
  26.                         <view class='menu-city' hidden='{{ rowShow[2].isShows ? true : fasle }}'>
  27.                             <text wx:for="{{ rowLise.row_xincheng.name }}" wx:key="item" class='meun-city-txt'>{{ item }}</text>
  28.                         </view>
  29.                         <view class='menu-city' hidden='{{ rowShow[3].isShows ? true : fasle }}'>
  30.                             <text wx:for="{{ rowLise.row_yanta.name }}" wx:key="item" class='meun-city-txt'>{{ item }}</text>
  31.                         </view>
  32.                         <view class='menu-city' hidden='{{ rowShow[4].isShows ? true : fasle }}'>
  33.                             <text wx:for="{{ rowLise.row_gaoxin.name }}" wx:key="item" class='meun-city-txt'>{{ item }}</text>
  34.                         </view>
  35.                         <view class='menu-city' hidden='{{ rowShow[5].isShows ? true : fasle }}'>
  36.                             <text wx:for="{{ rowLise.row_baqiao.name }}" wx:key="item" class='meun-city-txt'>{{ item }}</text>
  37.                         </view>
  38.                         <view class='menu-city' hidden='{{ rowShow[6].isShows ? true : fasle }}'>
  39.                             <text wx:for="{{ rowLise.row_changan.name }}" wx:key="item" class='meun-city-txt'>{{ item }}</text>
  40.                         </view>
  41.                     </view>
  42.                 </view>
  43.             </view>
  44.             <view class="meun-txt over-auto" hidden='{{ meunShow[1].isShows ? true : false }}'>
  45.                 <text wx:for="{{ price }}" wx:key="id" class='meun-city-txt meun-city-txt-price'>{{ item.name }}</text>
  46.             </view>
  47.             <view class="meun-txt over-auto" hidden='{{ meunShow[2].isShows ? true : false }}'>
  48.                 <text class='meun-city-txt meun-city-txt-price' wx:for="{{ roomModel }}" wx:key="id">{{ item.name }}</text>
  49.             </view>
  50.             <view class="meun-txt" hidden='{{ meunShow[3].isShows ? true : false }}'>
  51.                 <text>更多</text>
  52.             </view>
  53.         </view>

  54.     </view>
复制代码



wxss代码:


  1.   /* 下拉菜单 */
  2. /* 下拉菜单导航 */
  3. .menu-po{
  4.     position: relative;
  5.     left: 0;
  6.     top: 0;
  7.     right: 0;
  8.     bottom: 0;
  9. }
  10. .menu{
  11.     background-color: #fff;
  12.     border-bottom: 1rpx solid #e9e9e9;
  13. }
  14. .menu-list{
  15.     display: flex;
  16.     justify-content: space-between;
  17.     height: 90rpx;
  18. }
  19. .menu-nav{
  20.     width: 25%;
  21.     display: flex;
  22.     align-items: center;
  23.     justify-content: center;
  24. }
  25. .menu-nav image{
  26.     width: 32rpx;
  27.     height: 32rpx;
  28. }
  29. .menu-nav text{
  30.     color: #696969;
  31.     font-size: 14px;
  32. }



  33. .menu-if{
  34.     background-color: #ffffff;
  35.     box-sizing: border-box;
  36.     position: absolute;
  37.     top: 92rpx;
  38.     left: 0;
  39.     z-index: 9;
  40.     width: 100%;
  41. }
  42. .meun-txt{
  43.     height: auto;
  44.     color: #696969;
  45. }
  46. .menu-text-list{
  47.     position: relative;
  48.     left: 0;
  49.     top: 0;
  50.     right: 0;
  51.     bottom: 0;
  52. }
  53. .menu-text-list-left{
  54.     width: 100%;
  55.     background-color: #fff;
  56.     box-sizing: border-box;
  57.     padding-left: 35rpx;
  58. }
  59. /* text样式 */
  60. .meun-city-txt{
  61.     display: block;
  62.     border-bottom: 1rpx solid #e9e9e9;
  63.     width: 100%;
  64.     padding: 25rpx 0;
  65.     font-size: 14px;
  66. }
  67. .meun-city-txt-price{
  68.     display: flex;
  69.     justify-content:center;
  70. }

  71. .menu-text-list-rig{
  72.     width: 50%;
  73.     position: absolute;
  74.     top: 0;
  75.     right: 0;
  76.     background-color: #f9f9f9;
  77.     z-index: 10;
  78.     box-sizing: border-box;
  79.     padding-left: 35rpx;
  80. }


  81. /* over/auto */
  82. .over-auto{
  83.     height: 550rpx;
  84.     overflow: auto;
  85. }
  86. page{
  87.     background-color: #5FB878;
  88. }
复制代码


js代码:


  1. Page({
  2.     /* 页面的初始数据*/
  3.     data: {
  4.         // 获取设备高度
  5.         appHeight: '',

  6.         // 筛选导航栏数据
  7.         msgList: [
  8.             { key: 1, name: '区域'},
  9.             { key: 2, name: '售价'},
  10.             { key: 3, name: '房型'},
  11.             { key: 4, name: '更多'}
  12.         ],
  13.         // 判断导航栏列表是否显示
  14.         meunShow: [
  15.             { isShows: true },
  16.             { isShows: true },
  17.             { isShows: true },
  18.             { isShows: true }
  19.         ],

  20.         // 区域数据
  21.         // 西安市区
  22.         areaLise: [
  23.             { id: 0, name: '不限' },
  24.             { id: 0, name: '未央' },
  25.             { id: 1, name: '碑林' },
  26.             { id: 2, name: '新城' },
  27.             { id: 3, name: '雁塔' },
  28.             { id: 4, name: '高新' },
  29.             { id: 5, name: '灞桥' },
  30.             { id: 6, name: '长安' }
  31.         ],
  32.         // 市区街道
  33.         rowLise: {
  34.             row_weiyang: { id: 0, name: ['未央1路', '未央2路', '未央3路', '未央4路', '未央5路', '未央6路', '未央7路', '未央8路'] },
  35.             row_beilin: { id: 1, name: ['碑林1路', '碑林2路', '碑林3路', '碑林4路', '碑林5路', '碑林6路', '碑林7路', '碑林8路'] },
  36.             row_xincheng: { id: 2, name: ['新城1路', '新城2路', '新城3路', '新城4路', '新城5路', '新城6路', '新城7路', '新城8路'] },
  37.             row_yanta: { id: 3, name: ['雁塔1路', '雁塔2路', '雁塔3路', '雁塔4路', '雁塔5路', '雁塔6路', '雁塔7路', '雁塔8路'] },
  38.             row_gaoxin: { id: 4, name: ['高新1路', '高新2路', '高新3路', '高新4路', '高新5路', '高新6路', '高新7路', '高新8路'] },
  39.             row_baqiao: { id: 5, name: ['灞桥1路', '灞桥2路', '灞桥3路', '灞桥4路', '灞桥5路', '灞桥6路', '灞桥7路', '灞桥8路'] },
  40.             row_changan: { id: 5, name: ['长安1路', '长安2路', '长安3路', '长安4路', '长安5路', '长安6路', '长安7路', '长安8路'] }
  41.         },

  42.         // 区域模块市区街道隐藏/显示
  43.         rowShow: [
  44.             { isShows: true },
  45.             { isShows: true },
  46.             { isShows: true },
  47.             { isShows: true },
  48.             { isShows: true },
  49.             { isShows: true },
  50.             { isShows: true},
  51.             { isShows: true},
  52.         ],

  53.         // 区域右侧是否显示
  54.         rigShow: true,

  55.         // 售价
  56.         price: [
  57.             { id: 0, name: '不限' },
  58.             { id: 1, name: '1万以下' },
  59.             { id: 2, name: '1 - 1.5万' },
  60.             { id: 3, name: '1.5 - 2.0万' },
  61.             { id: 4, name: '2.0 - 2.5万' },
  62.             { id: 5, name: '2.5 - 3.0万' },
  63.             { id: 6, name: '3.0 - 3.5万' },
  64.             { id: 7, name: '3.5 - 4.0万' },
  65.             { id: 8, name: '4万以上' },
  66.         ],

  67.         // 房间型号
  68.         roomModel: [
  69.             { id: 0, name: '不限' },
  70.             { id: 1, name: '一室' },
  71.             { id: 2, name: '二室' },
  72.             { id: 3, name: '三室' },
  73.             { id: 4, name: '四室' },
  74.             { id: 5, name: '五室以上' }
  75.         ]

  76.     },
  77.     onLoad: function (options) {
  78.         // 获取设备高度
  79.         var res = wx.getSystemInfoSync();
  80.         this.setData({
  81.             appHeight: res.windowHeight
  82.         });

  83.         console.log(this.data.appHeight)
  84.     },

  85.     // 筛选导航栏事件
  86.     menuClick: function(e){
  87.         // 获取通过wxml  data-hi="{{ idx }}" 传过来的索引
  88.         var menuNum = e.currentTarget.dataset.hi;

  89.         // 拼接 ,使我们可以获取到menuShow里面每一个isSHows
  90.         var menuSrc = "meunShow[" + menuNum + "].isShows";

  91.         // 循环data中设置的meunShow
  92.         for (var n = 0; n < this.data.meunShow.length; n++){
  93.             // 拼接 ,使我们可以获取到menuShow里面每一个isSHows
  94.             var menuSrcs = "meunShow[" + n + "].isShows";
  95.             // 解决重复点击不能隐藏的问题
  96.             if (n != menuNum){
  97.                 // 初始化,每次点击时先全部隐藏,但是重复点击不会隐藏
  98.                 this.setData({
  99.                     [menuSrcs]: true
  100.                 });
  101.             };
  102.         };

  103.         // 给当前点击的去反data中设置的meunShow,使之显示, 只写此处只会显示不能隐藏
  104.         this.setData({
  105.             [menuSrc]: !this.data.meunShow[e.currentTarget.dataset.hi].isShows
  106.         });
  107.     },

  108.     // 区域列表事件
  109.     rowClick: function(e){
  110.         // 限制第一个 '不限' 不能点击
  111.         if (e.currentTarget.dataset.hi != 0){
  112.             // 获取wxml  data-hi="{{ index }}" 传过来的索引
  113.             var rowNum = e.currentTarget.dataset.hi;
  114.             // 同筛选导航栏事件,因第一个为不限不可点击, 所以减一
  115.             var rowSrc = "rowShow[" + ( rowNum - 1 ) + "].isShows";
  116.             // 隐藏所有的三级菜单
  117.             for (var m = 0; m < this.data.rowShow.length; m++){
  118.                 var rowSrcs = "rowShow[" + m + "].isShows";
  119.                 this.setData({
  120.                     [rowSrcs]: true
  121.                 });
  122.             };
  123.             // 同上
  124.             this.setData({
  125.                 rigShow: false,
  126.                 [rowSrc]: !this.data.rowShow[e.currentTarget.dataset.hi].isShows
  127.             });
  128.         };
  129.     },
  130. });
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|PHP  

GMT+8, 2024-5-1 21:38 , Processed in 0.072489 second(s), 33 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表