微信小程序 下拉菜单



//wcss
/**DropDownMenu**/

/*总菜单容器*/

.menu {
  display: block;
  height: 28px;
  position: relative;
}

/*一级菜单*/

.menu dt {
  font-size: 15px;
  float: left;
  /*hack*/
  width: 33%;
  height: 38px;
  border-right: 1px solid #d2d2d2;
  border-bottom: 1px solid #d2d2d2;
  text-align: center;
  background-color: #f4f4f4;
  color: #5a5a5a;
  line-height: 38px;
  z-index: 2;
}

/*二级菜单外部容器样式*/

.menu dd {
  position: absolute;
  width: 100%;
  margin-top: 40px;
  left: 0;
  z-index: -99;
}

/*二级菜单普通样式*/

.menu li {
  font-size: 14px;
  line-height: 34px;
  color: #575757;
  height: 34px;
  display: block;
  padding-left: 8px;
  background-color: #fff;
  border-bottom: 1px solid #dbdbdb;
}

/*二级菜单高亮样式*/

.menu li.highlight {
  background-color: #f4f4f4;
  color: #48c23d;
}

/* 显示与隐藏 */

.show {
  /*display: block;*/
  visibility: visible;
}

.hidden {
  /*display: none;*/
  visibility: hidden;
}

//wxml 
<dl class="menu">
    <block wx:for="{{reportData}}" wx:key="idMenu" wx:for-item="menuItem" wx:for-index="idMenu">
      <dt data-index="{{idMenu}}" bindtap="tapMainMenu">{{menuItem.reportType}}</dt>
      <dd class="{{subMenuDisplay[idMenu]}}" animation="{{animationData[idMenu]}}">
        <ul wx:for="{{menuItem.chilItem}}" wx:key="chilItem.ID" wx:for-item="chilItem" wx:for-index="idChil">
          <li class="{{subMenuHighLight[idMenu][idChil]}}" bindtap="tapSubMenu" data-index="{{idMenu}}-{{idChil}}">{{chilItem.Name}}</li>
        </ul>
        <picker class="timePicker" mode="date" value="{{dateValue}}" bindchange="datePickerBindchange" start="1999-01-01" end="2999-12-12"> 时间:{{dateValue}}</picker>
      </dd>
    </block>
</dl>


//js
//数据源
var ReportDataSync = [
    {
        reportType: "日报1",
        chilItem: [
            { ID: 1, Name: "日报1", ReportUrl: "DailyReport.aspx", Type: 1 },
            { ID: 2, Name: "日报2", ReportUrl: "DailyReport.aspx", Type: 1 },
            { ID: 3, Name: "日报3", ReportUrl: "DailyReport.aspx", Type: 1 }]
    },
    {
        reportType: "目录2",
        chilItem: [
            { ID: 1, Name: "目录1", ReportUrl: "DailyReport.aspx", Type: 2 },
            { ID: 2, Name: "目录2", ReportUrl: "DailyReport.aspx", Type: 2 },
            { ID: 3, Name: "目录3", ReportUrl: "DailyReport.aspx", Type: 2 },
            { ID: 4, Name: "目录4", ReportUrl: "DailyReport.aspx", Type: 2 }]
    },
    {
        reportType: "月报3",
        chilItem: [
            { ID: 1, Name: "月报1", ReportUrl: "DailyReport.aspx", Type: 1 },
            { ID: 2, Name: "月报2", ReportUrl: "DailyReport.aspx", Type: 2 }]
    }
]

//定义字段
var initSubMenuDisplay = [] 
var initSubMenuHighLight = []
var initAnimationData = []

/// 初始化DropDownMenu
loadDropDownMenu()

that.setData({
    reportData: ReportDataSync,//菜单数据
    subMenuDisplay: initSubMenuDisplay, //一级
    subMenuHighLight: initSubMenuHighLight, //二级
      animationData: initAnimationData //动画
})



//一级菜单点击
tapMainMenu: function (e) {
    //获取当前一级菜单标识
    var index = parseInt(e.currentTarget.dataset.index);
    //改变显示状态
    for (var i = 0; i < initSubMenuDisplay.length; i++) {
        if (i == index) {
            if (this.data.subMenuDisplay[index] == "show") {
                initSubMenuDisplay[index] = 'hidden'
            } else {
                initSubMenuDisplay[index] = 'show'
            }
        } else {
            initSubMenuDisplay[i] = 'hidden'
        }
    }
    this.setData({
        subMenuDisplay: initSubMenuDisplay
    })
       this.animation(index)
},

//二级菜单点击
tapSubMenu: function (e) {
    //隐藏所有一级菜单
    //this.setData({
    //subMenuDisplay: initSubMenuDisplay()
    //});
    // 当前二级菜单的标识
    var indexArray = e.currentTarget.dataset.index.split('-');
     // 删除所在二级菜单样式
    for (var i = 0; i < initSubMenuHighLight.length; i++) {
        if (indexArray[0] == i) {
            for (var j = 0; j < initSubMenuHighLight[i].length; j++) {
                initSubMenuHighLight[i][j] = '';
            }
        }
    }
    //给当前二级菜单添加样式
    initSubMenuHighLight[indexArray[0]][indexArray[1]] = 'highlight';
    //刷新样式
    this.setData({
        subMenuHighLight: initSubMenuHighLight
    });
      // 设置动画
     this.animation(indexArray[0]);
},

//菜单动画
animation: function (index) {
       // 定义一个动画
      var animation = wx.createAnimation({
         duration: 400,
       timingFunction: 'linear',
    })
    // 是显示还是隐藏
    var flag = this.data.subMenuDisplay[index] == 'show' ? 1 : -1;
    // 使之Y轴平移
    animation.translateY(flag * ((initSubMenuHighLight[index].length + 1) * 38)).step();
    // 导出到数据,绑定给view属性
     var animationStr = animation.export();
    // 原来的数据
     var animationData = this.data.animationData;
    animationData[index] = animationStr;
    this.setData({
        animationData: animationData
    });
}


/// <summary>
/// 初始化DropDownMenu
/// 1.一级目录 initSubMenuDisplay :['hidden']
/// 2.二级目录 initSubMenuHighLight :[['',''],['','','','']]]
/// </summary>
function loadDropDownMenu() {
    for (var i = 0; i < ReportDataSync.length; i++) {
        //一级目录
        initSubMenuDisplay.push('hidden')
        //二级目录
        var report = []
        for (var j = 0; j < ReportDataSync[i].chilItem.length; j++) {
            report.push([''])
        }
        initSubMenuHighLight.push(report)
              //动画
        initAnimationData.push("")
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值