一、项目背景与目标
在微信小程序开发中,分类页面是一个常见且重要的功能模块。它能够帮助用户快速定位和浏览不同类别的商品或信息,提升用户体验和操作效率。今天,我们将深入探讨如何制作一个实用的微信小程序分类页面,先来看一下最终实现的效果图。
(一)效果图展示与分析
通过效果图,我们可以看到分类页面的整体布局清晰明了。左侧是一级目录,以列表形式展示各个主要分类;右侧是与左侧一级目录对应的二级目录,以更详细的分类或具体产品项呈现。这种布局方式符合用户常见的分类浏览习惯,方便用户快速找到所需内容。
二、数据结构设计
(一)数组嵌套数组的结构
根据分类页面的功能需求,我们采用数组嵌套数组的数据结构来组织数据。外层数组用于存储一级目录数据,每个一级目录对象包含以下属性:
- 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” 较好,因为它的初始渲染消耗较低。
通过以上详细的步骤,我们完成了微信小程序分类页面的制作。希望这个教程能够帮助你更好地理解和掌握微信小程序开发中的分类页面制作技术,为你的小程序开发项目增添更多实用功能。如果在学习过程中有任何疑问或需要进一步的帮助,请随时查阅相关资料或向社区寻求支持。祝你开发顺利!