【微信小程序-原生开发】实用教程07 - Grid 宫格导航,详情页,侧边导航(含自定义页面顶部导航文字)

简介: 【微信小程序-原生开发】实用教程07 - Grid 宫格导航,详情页,侧边导航(含自定义页面顶部导航文字)

开始前,请先完成成员页的开发,详见

【微信小程序-原生开发】实用教程 06-轮播图、分类页签 tab 、成员列表(含Tdesign升级,切换调试基础库,设置全局样式,配置组件按需注入,添加图片素材,wx:for,生命周期 onLoad)

https://blog.csdn.net/weixin_41192489/article/details/128736269

需求描述

效果如下:

代码实现

Grid 宫格导航

pages\bible\index.wxml

<t-grid class="block" column="{{3}}">
  <t-grid-item text="身体健康" image="{{img1}}" url="{{url1}}"/>
  <t-grid-item text="家庭幸福" image="{{img2}}" />
  <t-grid-item text="生活美好" image="{{img3}}" />
  <t-grid-item text="财务富足" image="{{img4}}" />
  <t-grid-item text="事业有成" image="{{img5}}" />
  <t-grid-item text="工作顺遂" image="{{img6}}" />
  <t-grid-item text="人际和谐" image="{{img7}}" />
  <t-grid-item text="时间高效" image="{{img8}}" />
  <t-grid-item text="心情愉悦" image="{{img9}}" />
</t-grid>
  • column —— 每行宫格的数量
  • text —— 宫格的文字描述
  • image —— 宫格的配图
  • url —— 点击宫格后跳转的页面路径

更多配置项见

https://tdesign.tencent.com/miniprogram/components/grid?tab=api

pages\bible\index.js

Page({
  data: {
    url1: '/pages/bible/detail/health/index',
    img1: 'https://ucc.alicdn.com/images/user-upload-01/a631a1bdadd2452ea4070a59b11b0403.jpeg',
    img2: 'https://ucc.alicdn.com/images/user-upload-01/8f321eae383f45049f6dda0fdc6861ec.jpeg',
    img3: 'https://ucc.alicdn.com/images/user-upload-01/8a9fdb8f3ad941e8868fca0b9b557323.jpeg',
    img4: 'https://ucc.alicdn.com/images/user-upload-01/68aac8da25ab42e993e988769a9e006a.jpeg',
    img5: 'https://ucc.alicdn.com/images/user-upload-01/dc89dd3208f546f4bcfbde2240153a24.jpeg',
    img6: 'https://ucc.alicdn.com/images/user-upload-01/31b50ad5aba74f86b5860249e9123d66.jpeg',
    img7: 'https://ucc.alicdn.com/images/user-upload-01/033d163a40d347fcb4c0120d5462daed.jpeg',
    img8: 'https://ucc.alicdn.com/images/user-upload-01/5ead2d4c0a694cfebf86e2e03fad75d2.jpeg',
    img9: 'https://ucc.alicdn.com/images/user-upload-01/348a0750f0ba4c868040dc7300baf57d.jpeg',
  },
})

pages\bible\index.wxss

.block {
  display: block;
  margin-bottom: 32rpx;
}

pages\bible\index.json

{
  "usingComponents": {
    "t-grid": "tdesign-miniprogram/grid/grid",
    "t-grid-item": "tdesign-miniprogram/grid-item/grid-item"
  }
}

详情页

微信小程序中新增页面的详细步骤如下

  1. 先建文件夹
    以“身体健康”板块为例,在文件夹 bible 下新建文件夹 detail ,再在文件夹detail 内新建文件夹 health

再用快捷方式建页面

在文件夹 health 上点击鼠标右键打开右键快捷菜单,选择 新建 page,输入文件名 index 后回车

此种方式新建的页面,会在 app.json 中自动生成页面路径

侧边导航

使用 Tdesign 组件库提供的组件即可,直接上代码

pages\bible\detail\health\index.wxml

<view class="side-bar-wrapper">
  <t-side-bar value="{{sideBarIndex}}" bind:change="onSideBarChange">
    <t-side-bar-item wx:for="{{categories}}" wx:key="index" value="{{item.value || index}}" label="{{item.label}}" badge-props="{{item.badgeProps}}" />
  </t-side-bar>
  <scroll-view class="content" scroll-y scroll-with-animation scroll-top="{{scrollTop}}" bind:scroll="onScroll">
    <view wx:for="{{categories}}" wx:key="index" class="section">
      <view class="title">{{item.title || item.label}}</view>
        <block wx:for="{{item.items}}" wx:key="index" wx:for-item="cargo">
          <view class="itemBox">
            <t-image wx:if="{{cargo.type === 'img'}}" width='300' src="{{cargo.imgURL}}" mode="widthFix" />
            <view wx:else>
              {{cargo.content}}
            </view>
          </view>
        </block>
    </view>
  </scroll-view>
</view>

pages\bible\detail\health\index.js

Page({
  offsetTopList: [],
  data: {
    sideBarIndex: 1,
    scrollTop: 0,
    categories: [
      {
        label: '饮食',
        title: '饮食',
        items:[
          {
            content:'编辑ing'
          }
        ]
      },
      {
        label: '睡眠',
        title: '睡眠',
        items:[
          {
            content:'编辑ing'
          }
        ]
      },
      {
        label: '健身',
        title: '健身',
        items:[
          {
            content:'编辑ing'
          }
        ]
      },
      {
        label: '减肥',
        title: '减肥',
        badgeProps: {
          count: 10,
        },
        items: [
          {
            type:'img',
            imgURL:'https://ucc.alicdn.com/images/user-upload-01/640a758c89024652bc0d73a517cd00e9.jpeg'
          },
          {
            type:'img',
            imgURL:'https://ucc.alicdn.com/images/user-upload-01/6e6d965206af48f58e9f2de39e63eb0e.jpeg'
          },
          {
            type:'img',
            imgURL:'https://ucc.alicdn.com/images/user-upload-01/0603ee4b1f164200a9df2122d1c3b58d.jpeg'
          },
          {
            type:'img',
            imgURL:'https://ucc.alicdn.com/images/user-upload-01/52e8ac49f202431b843c9256e9887905.jpeg'
          },
          {
            type:'img',
            imgURL:'https://ucc.alicdn.com/images/user-upload-01/93c49548d7c64fd88d729c0f5a12c642.jpeg'
          },
          {
            type:'img',
            imgURL:'https://ucc.alicdn.com/images/user-upload-01/bd35e10b99e946478c541d285a301899.jpeg'
          },
          {
            type:'img',
            imgURL:'https://ucc.alicdn.com/images/user-upload-01/ce758559f189453ea368757612650fd8.jpeg'
          },
          {
            type:'img',
            imgURL:'https://ucc.alicdn.com/images/user-upload-01/cfdaa5c843ed4659a9ac1b2b511b67f7.jpeg'
          },
          {
            type:'img',
            imgURL:'https://ucc.alicdn.com/images/user-upload-01/f3852a775ab742069f22ddb1c754e2e7.jpeg'
          },
          {
            type:'img',
            imgURL:'https://ucc.alicdn.com/images/user-upload-01/bb68b3e22d4b4b5ba969366cc1d1eeb2.jpeg'
          },
        
        ],
      }
    ],
  },
  onLoad() {
    const query = wx.createSelectorQuery().in(this);

    query
      .selectAll('.title')
      .boundingClientRect((rects) => {
        this.offsetTopList = rects.map((item) => item.top);
      })
      .exec();
  },
  onSideBarChange(e) {
    const { value } = e.detail;

    this.setData({ sideBarIndex: value, scrollTop: this.offsetTopList[value] });
  },
  onScroll(e) {
    const { scrollTop } = e.detail;
    const threshold = 50; // 下一个标题与顶部的距离

    if (scrollTop < threshold) {
      this.setData({ sideBarIndex: 0 });
      return;
    }

    const index = this.offsetTopList.findIndex((top) => top > scrollTop && top - scrollTop <= threshold);

    if (index > -1) {
      this.setData({ sideBarIndex: index });
    }
  },
});
  • data 中 categories 的 label 为左侧导航的文字
  • data 中 categories 的 title 为右侧内容的标题
  • data 中 categories 的 items 为右侧内容的详情
  • 若内容为文本,则直接写在 items 数组的 content 中
  • 若内容为图片,则 items 数组的内容为
{
   type:'img',
   imgURL:'https://ucc.alicdn.com/images/user-upload-01/640a758c89024652bc0d73a517cd00e9.jpeg'
},

pages\bible\detail\health\index.wxss

page {
  background-color: #fff;
}

page .round-image {
  border-radius: 12rpx;
}

.side-bar-wrapper {
  display: flex;
  height: 100vh;
}

.side-bar-wrapper .content {
  flex: 1;
}

.side-bar-wrapper .section {
  padding: 32rpx 0;
}

.side-bar-wrapper .title {
  padding-left: 40rpx;
  margin-bottom: 8rpx;
  line-height: 52rpx;
}

.itemBox{
  padding:40rpx 40rpx 0rpx 40rpx;
}

.title{
  font-weight: bold;
}

pages\bible\detail\health\index.json

{
  "usingComponents": {
    "t-side-bar": "tdesign-miniprogram/side-bar/side-bar",
    "t-side-bar-item": "tdesign-miniprogram/side-bar-item/side-bar-item",
    "t-image": "tdesign-miniprogram/image/image"
  },
  "navigationBarTitleText": "DOS圆梦宝典--身体健康"
}

目录
相关文章
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
4439 7
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
5080 1
|
人工智能 自然语言处理 小程序
技术小白如何利用DeepSeek半小时开发微信小程序?
通过通义灵码的“AI程序员”功能,即使没有编程基础也能轻松创建小程序或网页。借助DeepSeek V3和R1满血版模型,用户只需用自然语言描述需求,就能自动生成代码并优化程序。例如,一个文科生仅通过描述需求就成功开发了一款记录日常活动的微信小程序。此外,通义灵码还提供智能问答模式,帮助用户解决开发中的各种问题,极大简化了开发流程,让普通人的开发体验更加顺畅。
4063 11
技术小白如何利用DeepSeek半小时开发微信小程序?
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
小程序 JavaScript 前端开发
微信小程序开发全流程:从注册到上线的完整指南
这篇文章详细记录了微信小程序的完整开发到最终上线的每一个步骤。适合对小程序开发感兴趣的个人开发者或希望了解完整流程的学习者,涵盖了云开发、事件绑定、生命周期管理、组件使用等关键内容。
23605 14
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。
|
JSON 缓存 小程序
微信小程序组件封装与复用:提升开发效率
本文深入探讨了微信小程序的组件封装与复用,涵盖组件的意义、创建步骤、属性与事件处理,并通过自定义弹窗组件的案例详细说明。组件封装能提高代码复用性、开发效率和可维护性,确保UI一致性。掌握这些技能有助于构建更高质量的小程序。
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。
|
人工智能 小程序 API
【一步步开发AI运动小程序】十二、自定义一个运动分析器,实现计时计数01
随着AI技术的发展,AI运动APP如雨后春笋般涌现,如“乐动力”、“天天跳绳”等,推动了云上运动会、线上健身等热潮。本文将指导你从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”,介绍运动识别原理、计量方式及运动分析器基类的使用,帮助你在小程序中实现运动计时和计数功能。下篇将继续探讨运动姿态检测规则的编写。
|
缓存 小程序 API
微信小程序页面导航与路由:实现多页面跳转与数据传递
本文深入探讨微信小程序的页面导航与路由机制,介绍多种页面跳转方式如`wx.navigateTo`、`wx.redirectTo`、`wx.switchTab`等,并讲解通过URL、全局变量和事件传递数据的方法。结合案例实现多页面跳转与数据传递,帮助开发者掌握这一重要技能。