热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表

篇首语:本文由编程笔记#小编为大家整理,主要介绍了小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表相关的知识,希望对你有一定的参考价值。




如下图
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序左右布局
但是有时候我们想实现三级分类,该怎么做呢,今天就来教大家如何实现三级分类。随便教下大家如何把excel数据批量的导入到云开发数据库



一,老规矩,先看效果图

小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序菜单栏_02
先来给大家分析下原理



二,原理分析

首先来分析下有那三级
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序左右布局_03
可以看出,我们最顶部是一级菜单,左侧是二级菜单,右侧是最终的三级列表。

我们来理一理层级关系


  • =宿舍楼号

  • ====宿舍号

  • ========学生

聪明的人肯定知道,我们是一个宿舍楼里包含很多宿舍,宿舍里有包含很多学生。这样我们的三级就是 楼号》宿舍》学生。

当我们切换楼号时,就会重新获取当前楼号包含的宿舍。
比如下图左为惠兰楼,右为学苑楼的数据,可以看出每个楼里的宿舍和学生信息。
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序导航栏_04
分析完原理,我们就来看技术实现了。



三,获取分类数据

这里先给大家说下,我这里是用一张表来存的所有信息
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序三级分类_05
既然是一张表存所有数据,我们就要做下分组,看数据里都有哪些楼号。



3-1,借助group实现楼号分组(一级数据)

小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序三级分类_06
具体代码如下
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序导航栏_07

然后获取到的数据如下
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序左右布局_08
可以看出我们一共有11个宿舍楼。就是我们顶部的这些区域
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序菜单栏_09



3-2,借助group和match实现宿舍分组(二级数据)

小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序菜单栏_10
这个时候,我们就要根据用户选择的楼号,来对当前楼号下所有数据进行分组了
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序学校_11
分组后的数据如下
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序三级分类_12
可以看出,前进楼有两个宿舍



3-3,借助where获取宿舍里的学生数据(三级)

小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序三级分类_13
获取的数据如下
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序菜单栏_14
到这里我们的三级分类就实现了



四,完整项目代码

下面把完整项目代码,贴出来给大家



4-1,wxml




item._id







item._id









item.mingzi







4-2,wxss样式

/* 导航栏布局相关 */
.navbar
width: 100%;
height: 90rpx;
/* 文本不换行 */
white-space: nowrap;
display: flex;
box-sizing: border-box;
border-bottom: 1rpx solid #eee;
background: #fff;
align-items: center;
/* 固定在顶部 */
position: fixed;
left: 0rpx;
top: 0rpx;
.nav-item
padding-left: 25rpx;
padding-right: 25rpx;
height: 100%;
display: inline-block;
/* 普通文字大小 */
font-size: 28rpx;
.nav-text
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
letter-spacing: 4rpx;
box-sizing: border-box;
.tab-on
color: #000080;
/* 选中放大 */
font-size: 38rpx !important;
font-weight: 600;
border-bottom: 4rpx solid #000080 !important;
/* 正文部分 */
.container
position: fixed;
width: 100%;
height: 90%;
top: 100rpx;
background-color: #FFF;
.nav_left
width: 25%;
height: 100%;
background: #F2F2F2;
text-align: center;
position: absolute;
top: 0;
left: 0;
.nav_left .nav_left_items
height: 100rpx;
line-height: 100rpx;
font-size: 28rpx;
.nav_left .nav_left_items.active
position: relative;
background: #FFF;
color: #000080;
.nav_left .nav_left_items.active::before
display: inline-block;
width: 6rpx;
height: 60rpx;
background: #000080;
content: ;
position: absolute;
top: 20rpx;
left: 0;
.nav_right
position: absolute;
top: 0;
right: 0;
width: 75%;
height: 100%;
.nav_right .nav_right_items
float: left;
width: 33.33%;
text-align: center;
padding: 30rpx 0;
.nav_right .nav_right_items image
width: 120rpx;
height: 160rpx;
.nav_right .nav_right_items text
display: block;
margin-top: 20rpx;
font-size: 28rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
.nocate
padding: 100rpx;
text-align: center;
.nocate image
width: 70rpx;
height: 70rpx;
.nocate text
font-size: 28rpx;
display: block;
color: #BBB;
/*隐藏滚动条*/
::-webkit-scrollbar
width: 0;
height: 0;
color: transparent;
.topx
width: 90%;
/* height: 700rpx; */
margin: 30rpx auto;
z-index: 1;
border-radius: 10rpx;
background-size: cover;


4-3,js实现分类逻辑

const db = wx.cloud.database()
const $ = db.command.aggregate
Page(
data:
tabs: [],
tabCur: 0, //默认选中
lefts: [],
leftCur: 0,
rights: [],
,
onLoad: function (options)
db.collection(demo).aggregate()
.group(
_id: $louhao
)
.end()
.then(res =>
console.log(楼号列表, res)
this.setData(
tabs: res.list
)
this.sushehao(res.list[0]._id)
)
,
//加载当前楼号所有的宿舍号
sushehao()
let louhao = this.data.tabs[this.data.tabCur]._id
db.collection(demo).aggregate()
.match(
louhao
)
.group(
_id: $sushe
)
.sort(
sushe: -1 //宿舍号升序排列
)
.end()
.then(res =>
console.log(louhao + 宿舍号列表, res)
this.setData(
lefts: res.list
)
this.xuesheng()
)
,
//加载当前宿舍号里所有的学生
xuesheng()
let louhao = this.data.tabs[this.data.tabCur]._id
let sushe = this.data.lefts[this.data.leftCur]._id
db.collection(demo)
.where(
louhao,
sushe
).get()
.then(res =>
console.log(louhao + sushe + 室学生列表, res)
this.setData(
rights: res.data
)
)
,
//顶部选择分类条目
tabSelect(e)
this.setData(
tabCur: e.currentTarget.dataset.id,
scrollLeft: (e.currentTarget.dataset.id - 2) * 200
, success =>
this.sushehao()
)
,
//左侧条目选择
switchLeftTab(e)
let index = e.target.dataset.index;
this.setData(
leftCur: index,
, success =>
this.xuesheng()
)
,
)


4-4,记得修改数据表权限

修改权限为所有用户可读,仅创建者可读写
小程序分类页实现三级分类,顶部导航栏,左侧分类栏,右侧数据列表_小程序导航栏_15
到这里我们的三级分类就完整的实现了。关于excel数据批量导入,我下节再做讲解的。欢迎关注,欢迎留言交流。


推荐阅读
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • golang常用库:配置文件解析库/管理工具viper使用
    golang常用库:配置文件解析库管理工具-viper使用-一、viper简介viper配置管理解析库,是由大神SteveFrancia开发,他在google领导着golang的 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 主要用了2个类来实现的,话不多说,直接看运行结果,然后在奉上源代码1.Index.javaimportjava.awt.Color;im ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
author-avatar
菜鸟php
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有