微信小程序实战篇-分类页面制作
一、项目背景与目标
在微信小程序开发中,分类页面是一个常见且重要的功能模块。它能够帮助用户快速定位和浏览不同类别的商品或信息,提升用户体验和操作效率。今天,我们将深入探讨如何制作一个实用的微信小程序分类页面,先来看一下最终实现的效果图。
(一)效果图展示与分析
通过效果图,我们可以看到分类页面的整体布局清晰明了。左侧是一级目录,以列表形式展示各个主要分类;右侧是与左侧一级目录对应的二级目录,以更详细的分类或具体产品项呈现。这种布局方式符合用户常见的分类浏览习惯,方便用户快速找到所需内容。
二、数据结构设计
(一)数组嵌套数组的结构
根据分类页面的功能需求,我们采用数组嵌套数组的数据结构来组织数据。外层数组用于存储一级目录数据,每个一级目录对象包含以下属性:
- 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使用的声明放在类定义前面,类中的…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
