微信小程序 下拉菜单简单实例

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("")
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# 微信小程序
# 下拉菜单
# 小程序
# 下拉菜单实例
# 微信公众号菜单配置微信小程序实例详解
# 微信小程序实现单列下拉菜单效果
# 微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
# 微信小程序 下拉菜单的实现
# 微信小程序实现下拉菜单切换效果
# 微信小程序实现弹出菜单功能
# 微信小程序 特效菜单抽屉效果实例代码
# 微信小程序 仿美团分类菜单 swiper分类菜单
# 微信小程序左滑动显示菜单功能的实现
# 微信小程序实现收缩式菜单
# 希望能
# 谢谢大家
# 使之
# 绑定
# 导出到
# margin
# center
# top
# li
# a5a5a
# line
# color
# background
# absolute
# index
# dd
# visible
# hidden
# show
# visibility
相关文章:
营销式网站制作方案,销售哪个网站招聘效果最好?
建站之星北京办公室:智能建站系统与小程序生成方案解析
常州企业网站制作公司,全国继续教育网怎么登录?
建站VPS配置与SEO优化指南:关键词排名提升策略
建站之星安装步骤有哪些常见问题?
家具网站制作软件,家具厂怎么跑业务?
个人网站制作流程图片大全,个人网站如何注销?
建站之星2.7模板:企业网站建设与h5定制设计专题
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何用PHP工具快速搭建高效网站?
清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?
如何用虚拟主机快速搭建网站?详细步骤解析
*服务器网站为何频现安全漏洞?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
如何在云服务器上快速搭建个人网站?
高性价比服务器租赁——企业级配置与24小时运维服务
如何在云主机上快速搭建多站点网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
c# Task.ConfigureAwait(true) 在什么场景下是必须的
建站之星收费标准详解:套餐费用及年费价格表一览
如何批量查询域名的建站时间记录?
香港服务器租用费用高吗?如何避免常见误区?
如何快速登录WAP自助建站平台?
建站之星微信建站一键生成小程序+多端营销系统
建站之星2.7模板快速切换与批量管理功能操作指南
建站主机空间推荐 高性价比配置与快速部署方案解析
C#如何使用XPathNavigator高效查询XML
小建面朝正北,A点实际方位是否存在偏差?
如何解决VPS建站LNMP环境配置常见问题?
设计网站制作公司有哪些,制作网页教程?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
建站之星展会模版如何一键下载生成?
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
高防服务器:AI智能防御DDoS攻击与数据安全保障
网站制作的方法有哪些,如何将自己制作的网站发布到网上?
,交易猫的商品怎么发布到网站上去?
如何快速搭建高效WAP手机网站吸引移动用户?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何选择美橙互联多站合一建站方案?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
小程序网站制作需要准备什么资料,如何制作小程序?
建站之星下载版如何获取与安装?
Swift开发中switch语句值绑定模式
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何零基础开发自助建站系统?完整教程解析
如何在服务器上三步完成建站并提升流量?
TestNG的testng.xml配置文件怎么写
*请认真填写需求信息,我们会在24小时内与您取得联系。