欢迎光临,了解微信小程序开发,就上易用通!

微信小程序下拉筛选菜单WXDropDownMenu组件

发布:2018-01-25 15:02浏览: 来源:网络 作者:tianshu

先来看下效果图:
微信小程序下拉筛选菜单WXDropDownMenu组件(图1)

思路与步骤:
布局方面,整体使用dl来写,二级包在dd中,用ul li来写;交互方面,点击某一级菜单,关闭兄弟子菜单,点击某子菜单关闭所有菜单。
1.使用dt做出第一级菜单
2.使用dd嵌套第二级菜单,初始隐藏、position为absolute,使用z-index浮出页面层

  1. /*总菜单容器*/
  2. .menu {
  3.      display: block;
  4.     height: 38px;
  5. }
  6.  
  7. /*一级菜单*/
  8. .menu dt {
  9.     font-size: 15px;
  10.     float: left;
  11.     /*hack*/
  12.     width: 33%;
  13.     height: 38px;
  14.     border-right: 1px solid #d2d2d2;
  15.     border-bottom: 1px solid #d2d2d2;
  16.     text-align: center;
  17.     background-color: #f4f4f4;
  18.     color: #5a5a5a;
  19.     line-height: 38px;
  20. }
  21.  
  22. /*二级菜单外部容器样式*/
  23. .menu dd{
  24.     position: absolute;
  25.     width: 100%;
  26.     /*hack*/
  27.     top:39px;
  28.     left:0;
  29.     z-index:999;
  30. }
  31.  
  32. /*二级菜单普通样式*/
  33. .menu li{
  34.     font-size: 14px;
  35.     line-height: 34px;
  36.     color: #575757;
  37.     height: 34px;
  38.     display: block;
  39.     padding-left: 8px;
  40.     background-color: #fff;
  41.     border-bottom: 1px solid #dbdbdb;
查看效果,接下来实现点击事件。
如图

微信小程序下拉筛选菜单WXDropDownMenu组件(图2)

3.dt绑定点击事件tapMainMenu,flag控制显隐toggle,提供2个class,hidden与show,来控制显隐。注:dt也是可以bindTap的,不单是view。

  1. /* 显示与隐藏 */
  2. .show {
  3.     display: block;
  4. }
  5.  
  6. .hidden {
  7.     display: none;
  8. }
4.关闭所有一级菜单,每个一级菜单都有一个index标识,由tapMainMenu事件传递过去,与数组subMenuDisplay一一对应,当前元素subMenuDisplay[index]视原来状态决定是显示或隐藏。
核心代码:

  1. <dl class="menu">
  2.     <dt data-index="0" bindtap="tapMainMenu">价格</dt>
  3.     <dd class="{{subMenuDisplay[0]}}">
  4.         <ul><li>sub1</li><li>sub2</li></ul>
  5.     </dd>
  6. </dl>
  1. // 使用function初始化array,相比var initSubMenuDisplay = [] 既避免的引用复制的,同时方式更灵活,将来可以是多种方式实现,个数也不定的
  2. function initSubMenuDisplay() {
  3.     return ['hidden', 'hidden', 'hidden'];
  4. }
  5.  
  6. Page({
  7.     data:{
  8.         subMenuDisplay:initSubMenuDisplay()
  9.     },
  10.     tapMainMenu: function(e) {
  11. //        获取当前显示的一级菜单标识
  12.         var index = parseInt(e.currentTarget.dataset.index);
  13.         // 生成数组,全为hidden的,只对当前的进行显示
  14.         var newSubMenuDisplay = initSubMenuDisplay();
  15. //        如果目前是显示则隐藏,反之亦反之。同时要隐藏其他的菜单
  16.         if(this.data.subMenuDisplay[index] == 'hidden') {
  17.             newSubMenuDisplay[index] = 'show';
  18.         } else {
  19.             newSubMenuDisplay[index] = 'hidden';
  20.         }
  21.         // 设置为新的数组
  22.         this.setData({
  23.             subMenuDisplay: newSubMenuDisplay
  24.         });
  25.     }
  26. });





免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。