微信小程序实战篇-分类页面制作
一、项目背景与目标
在微信小程序开发中,分类页面是一个常见且重要的功能模块。它能够帮助用户快速定位和浏览不同类别的商品或信息,提升用户体验和操作效率。今天,我们将深入探讨如何制作一个实用的微信小程序分类页面,先来看一下最终实现的效果图。
(一)效果图展示与分析
通过效果图,我们可以看到分类页面的整体布局清晰明了。左侧是一级目录,以列表形式展示各个主要分类;右侧是与左侧一级目录对应的二级目录,以更详细的分类或具体产品项呈现。这种布局方式符合用户常见的分类浏览习惯,方便用户快速找到所需内容。
二、数据结构设计
(一)数组嵌套数组的结构
根据分类页面的功能需求,我们采用数组嵌套数组的数据结构来组织数据。外层数组用于存储一级目录数据,每个一级目录对象包含以下属性:
- cate_id:用于唯一标识每个一级目录,方便在后续的操作中进行识别和处理。
- cate_name:一级目录的名称,如 “护肤”“彩妆”“香水 / 香氛”“个人护理” 等,直接展示给用户,帮助他们快速了解分类内容。
- ishaveChild:一个布尔值,用于判断该一级目录是否包含二级目录。如果为 true,表示有二级目录;如果为 false,则表示没有二级目录,直接显示提示信息。
- children:嵌套的数组,用于存储二级目录的数据。二级目录对象包含以下属性:
- child_id:二级目录项的唯一标识。
- name:二级目录项的名称,如 “洁面皂”“卸妆”“气垫 bb” 等。
- image:二级目录项对应的图片链接,用于在页面上展示相关图片,增强视觉效果和吸引力。
(二)数据示例与解析
以下是一个简化的数据示例,帮助你更好地理解数据结构:
收起
javascript
复制
[
{
cate_id: 1,
cate_name: "护肤",
ishaveChild: true,
children: [
{
child_id: 1,
name: '洁面皂',
image: "http://mz.djmall.xmisp.cn/files/logo/20161208/148117972563.jpg"
},
{
child_id: 2,
name: '卸妆',
image: "http://mz.djmall.xmisp.cn/files/logo/20161207/148110444480.jpg"
}
]
},
{
cate_id: 2,
cate_name: "彩妆",
ishaveChild: true,
children: [
{
child_id: 1,
name: '气垫 bb',
image: "http://mz.djmall.xmisp.cn/files/logo/20161212/14815381301.jpg"
},
{
child_id: 2,
name: '修容/高光',
image: "http://mz.djmall.xmisp.cn/files/logo/20161212/14815381411.jpg"
}
]
},
{
cate_id: 3,
cate_name: "香水/香氛",
ishaveChild: true,
children: [
{
child_id: 1,
name: '淡香水 EDT',
image: "http://mz.djmall.xmisp.cn/files/logo/20161213/14815978910.jpg"
},
{
child_id: 2,
name: '浓香水 EDP',
image: "http://mz.djmall.xmisp.cn/files/logo/20161213/148159789883.jpg"
}
]
},
{
cate_id: 4,
cate_name: "个人护理",
ishaveChild: false,
children: []
}
]
在这个示例中,“护肤”“彩妆”“香水 / 香氛” 一级目录都包含二级目录项,而 “个人护理” 一级目录没有二级目录,其 “children” 数组为空。
比文云官网,专为企业提供小程序、网站、系统搭建服务,无论是模板搭建还是代码定制,通通都能满足,找服务来比文云官网。
三、代码实现详解
(一)classify.js 文件
- Page 函数与数据定义
- 在 classify.js 文件中,首先使用 “Page” 函数定义了一个页面。在 “data” 对象中,我们初始化了分类页面所需的数据:
收起
javascript
复制
Page({
data: {
cateItems: [
// 一级目录数据数组,包含多个一级目录对象
],
curNav: 1,
curIndex: 0
}
})
- “cateItems” 数组存储了完整的分类数据结构,如上述数据示例所示。“curNav” 用于控制左侧一级目录中当前被点亮(选中)的按钮,初始值为 1,表示默认选中第一个一级目录。“curIndex” 用于根据用户点击的一级目录,确定在右侧显示哪个二级目录的数据,初始值为 0。
- 事件处理函数 - switchRightTab
- 定义了 “switchRightTab” 函数作为分类 tab 事件的处理函数。当用户点击左侧一级目录中的某个项时,会触发该函数。函数内部通过 “e.target.dataset.id” 获取点击项的 id,通过 “parseInt (e.target.dataset.index)” 获取点击项在数组中的下标值。然后,使用 “this.setData” 方法更新 “curNav” 和 “curIndex” 的值,从而实现切换右侧二级目录显示内容和点亮左侧相应按钮的效果。
(二)classify.wxml 文件
- 页面结构搭建
- 在 classify.wxml 文件中,构建了分类页面的结构。整体使用一个 “<view class="container">” 作为主盒子,将页面分为左侧栏和右侧栏两部分。
- 左侧栏:通过 “<block wx:for="{{cateItems}}">” 循环遍历 “cateItems” 数组,生成左侧一级目录列表。每个一级目录项使用 “<view class="nav_left_items {{curNav == item.cate_id? 'active' : ''}} " bindtap="switchRightTab" data-index="{{index}}" data-id="{{item.cate_id}}">{{item.cate_name}}</view>” 来展示。这里使用了条件判断类名的方式,根据 “curNav” 的值与当前一级目录项的 “cate_id” 是否相等,来决定是否添加 “active” 类名,从而实现点亮选中项的效果。同时,绑定了 “switchRightTab” 点击事件,并传递了数据下标和 id。
- 右侧栏:首先通过 “wx:if="{{cateItems [curIndex].ishaveChild}}” 判断当前选中的一级目录是否有二级目录。如果有,则使用 “<block wx:for="{{cateItems[curIndex].children}}">” 循环遍历二级目录数据,生成右侧二级目录列表项,每个项包含图片和文字,并使用 “<navigator url="../../detail/detail}}">” 实现点击跳转到详情页面的功能。如果没有二级目录,则显示 “<view class="nodata_text" wx:else>该分类暂无数据</view>” 提示信息。
(三)classify.wxss 文件
- 样式定义与布局调整
- 在 classify.wxss 文件中,定义了各种样式来美化分类页面。
- 整体页面背景色设置为 “#f5f5f5”,主盒子 “container” 设置了相对定位、宽度、高度、背景色和文字颜色等样式,使其在页面中呈现出清晰的布局。
- 左侧栏 “nav_left” 设置为行内块级元素,宽度为 25%,背景色为灰色,文字居中显示。左侧栏列表项 “nav_left_items” 设置了高度、行高、上下 padding、边框和文字大小等样式,实现了每个项的美观布局。当项被选中时(添加 “active” 类名),背景色变为白色,文字颜色变为 “#f0145a”。
- 右侧栏 “nav_right” 使用绝对定位,宽度为 75%,高度占满,设置了内边距和背景色。右侧栏列表项 “nav_right_items” 浮动向左,宽度为 33.33%,设置了高度、文字居中、图片宽高和文字溢出处理等样式。图片设置了固定宽高,文字设置为块级元素,溢出部分显示为省略号,确保在有限空间内展示完整信息。
(四)知识小课堂
- wx:for 列表渲染
- “wx:for” 是微信小程序用于循环数组并展示列表型数据的指令。默认情况下,数组当前项的下标变量名为 “index”,数组当前项的变量名为 “item”。例如:
收起
xml
复制
<view wx:for="{{items}}">{{index}} : {{item.message}}</view>
- 也可以自定义变量名,使用 “wx:for - item” 指定数组当前元素的变量名,使用 “wx:for - index” 指定数组当前下标的变量名,如:
收起
xml
复制
<view wx:for="{{array}}" wx:for - index="idx" wx:for - item="itemName">{{idx}} : {{itemName.message}}</view>
- wx:if 条件渲染
- “wx:if” 用于条件渲染,根据判断语句决定是否渲染某个 view 控件。通常与 “wx:elif” 和 “wx:else” 配合使用,实现更复杂的条件判断。例如:
收起
xml
复制
<view wx:if="{{length > 5}}">1</view>
<view wx:elif="{{length > 2}}">2</view>
<view wx:else>3</view>
- 与 “hidden” 指令的区别在于,“wx:if” 是当满足条件时才会渲染 view,而 “hidden” 是 view 一定会被渲染,只是控制其显示与隐藏。一般来说,如果需要频繁切换显示状态,使用 “hidden” 更好,因为它的切换消耗较低;如果在运行时条件不大可能改变,则使用 “wx:if” 较好,因为它的初始渲染消耗较低。
通过以上详细的步骤,我们完成了微信小程序分类页面的制作。希望这个教程能够帮助你更好地理解和掌握微信小程序开发中的分类页面制作技术,为你的小程序开发项目增添更多实用功能。如果在学习过程中有任何疑问或需要进一步的帮助,请随时查阅相关资料或向社区寻求支持。祝你开发顺利!
相关文章:
微信小程序实战篇-分类页面制作
一、项目背景与目标 在微信小程序开发中,分类页面是一个常见且重要的功能模块。它能够帮助用户快速定位和浏览不同类别的商品或信息,提升用户体验和操作效率。今天,我们将深入探讨如何制作一个实用的微信小程序分类页面,先来看一下…...
第三十七章 如何清理docker 日志
如何清理docker 日志 目标 掌握docker 日志设置掌握docker日志的清理办法背景 在现代软件开发和部署环境中,Docker 容器技术因其轻量级、可移植性和高效资源利用的特点,已成为许多企业和开发团队的首选。Docker 容器在运行过程中会产生大量的日志信息,这些日志对于监控容器…...
二刷代码随想录第七天
454. 四数相加 II 先用map记录前两个数的和num1 num2的值出现了多少次再在后两个数组里找0 - (num1 num2),找到后就累加map中的次数 class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3…...
1.tree of thought (使用LangChain解决4x4数独问题)
本教程将介绍如何使用LangChain库和chatglm API来解决一个4x4的数独问题。我们将通过以下步骤实现这一目标: 初始化chatglm 的聊天模型。定义数独问题和解决方案。创建一个自定义的检查器来验证每一步的思考。使用ToTChain来运行整个思考过程。 1. 初始化chatglm4…...
网络基础(4)IP协议
经过之前的学习对传输协议的学习,对于传输协议从系统底层到应用层对于socket套接字的学习已经有了一套完整的理论。 对于网络的层状结构,现在已经学习到了应用层和传输层: 在之前的学习中,通信的双方都只考虑了双方的传输层的东西࿰…...
124. 二叉树中的最大路径和【 力扣(LeetCode) 】
文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 124. 二叉树中的最大路径和 一、题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径…...
echarts:简单实现默认显示两柱子折线,点击按钮后显示新的柱子
问: 用echarts实现:默认显示两柱子折线,点击“税率”按钮,显示税率柱子,之前的两柱子折线消失 回答: <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8…...
视频里的音频怎么提取出来成单独文件?音频提取照着这些方法做
在数字时代,视频与音频的分离与重组已成为日常需求之一。无论是出于制作背景音乐、保存讲座内容,还是编辑播客素材,提取视频中的音频并将其保存为单独文件都显得尤为重要。视频里的音频怎么提取出来成单独文件?本文将详细介绍几种…...
Excel——宏教程(精简版)
一、宏的简介 1、什么是宏? Excel宏是一种自动化工具,它允许用户录制一系列操作并将其转换为VBA(Visual Basic for Applications)代码。这样,用户可以在需要时执行这些操作,以自动化Excel任务。 2、宏的优点 我们可以利用宏来…...
C++中的std::tuple和std::pair
在C标准库中,std::tuple和std::pair是两种极具实用性的数据结构,它们都具备存储多个元素的功能,但各自有其独特的适用环境和特性。本文旨在深入探讨这两者之间的区别,并阐述在不同应用场景下应如何合理选择使用。 一、基本概念 s…...
引力搜索算法
引力搜索算法过程,包括了初始化、适应度评估、质量计算、加速度计算、更新速度和位置的一些步骤。 import numpy as np import random as rd from math import exp, sqrt import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from matplotli…...
【时间之外】IT人求职和创业应知【35】-RTE三进宫
目录 新闻一:京东工业发布11.11战报,多项倍增数据体现工业经济信心提升 新闻二:阿里云100万核算力支撑天猫双11,弹性计算规模刷新纪录 新闻三:声网CEO赵斌:RTE将成为生成式AI时代AI Infra的关键部分 认知…...
Linux的目录结构
/ ├── bin # Binary - 存放用户可以直接使用的基本二进制可执行文件 ├── sbin # System Binaries - 存放系统管理员专用的二进制可执行文件 ├── usr # Unix System Resources - 存放用户使用的软件和库文件 │ ├── bin # Binary - 用户级应用程序…...
python: generator IDAL and DAL using sql server 2019
其它数据库也是一样的思维方式 create IDAL # encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述: # Author : geovindu,Geovin Du 涂聚文. # IDE : P…...
命令执行简单
前言:小迪安全2022第一节反弹shell,小迪用的是两台都是云服务器,没有服务器可以在自己的主机上搭建也是可以的,主机上搭两个网站 思路:生成一个木马文件,下载到本机,然后利用本机上传到目标主机…...
【一句话经验】亚马逊云EC2 ubuntu24.04.1开启ROOT登录Permission denied (publickey)
按照常规的方法SSH登录会一直报错: Permission denied (publickey) 因为亚马逊云的默认配置不是在/etc/ssh/sshd_config,而是在引入的文件里了,所以在instance控制台输入这行命令来解除登录限制: sudo sed -i s/^PasswordAuthe…...
百度智能云千帆大模型平台引领企业创新增长
本文整理自百度世界大会 2024——「智能跃迁 产业加速」论坛的同名演讲。 更多大会演讲内容,请访问: https://baiduworld.baidu.com 首先,跟大家分享一张图,这个是我们目前大模型应用落地的场景分布。可以看到,大模型…...
【Linux】深入理解GCC/G++编译流程及库文件管理
目录 1.背景知识 2.gcc/g如何完成编译 (1) 预处理(进行宏替换) (2) 编译(生成汇编) (3) 汇编(生成机器可识别代码) (4) 链接(生成可执行文件或库文件) (5) 总结 (6) 函数库 …...
【Unity基础】对比Unity中两种粒子系统
在Unity中,Particle System和Visual Effect Graph (VFX) 都是用于创建粒子效果的工具,但它们的设计目标、使用场景和功能特点有所不同。以下是详细对比: 1. Particle System 特点 传统粒子系统,Unity自带的模块化粒子特效工具。…...
琐碎笔记——pytest实现前置、后置、参数化、跳过用例执行以及重试
pytest的fixture中文介绍可参考(不过文档稍微有点老): https://www.osgeo.cn/pytest/fixture.html#what-fixtures-are pytest各个作用域的fixture scope “function” 可作用于每个用例 fixture使用的声明放在类定义前面,类中的…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
