加载中…
文档目录
基础UI组件

简介

本文件面向DouPHP小程序的基础UI组件,重点围绕导航栏组件的实现与使用,提供属性配置、事件回调、插槽用法、样式定制与主题适配的完整说明。同时给出按钮、输入框、弹窗、加载器等常用基础组件的使用建议与最佳实践,帮助开发者快速构建一致、可维护的小程序界面。

项目结构

小程序采用自定义导航栏模式,全局在应用配置中启用 custom 导航样式,并在应用中注册全局导航栏组件。页面通过引入该组件实现统一的顶部导航体验。

graph TB
A["应用配置 app.json"] --> B["全局 usingComponents 注册 navbar"]
B --> C["页面模板中使用 <navbar/>"]
C --> D["导航栏组件 navbar.wxml/wxss/ts"]
D --> E["工具函数 ui.ts跳转/提示"]

图示来源

  • app.json:136-145
  • navbar.wxml:1-39
  • navbar.ts:1-79
  • ui.ts:1-73

核心组件

  • 导航栏组件(navbar)
    • 作用:提供固定顶部的导航区域,支持左侧菜单、居中标题、右侧插槽;支持滚动透明度渐变、返回/首页行为、调试入口等。
    • 关键能力:
      • 自定义背景色与标题颜色
      • 滚动时背景与标题透明度联动
      • 左侧返回与首页按钮(可隐藏)
      • 左/中/右三个插槽,便于扩展
      • 基于全局状态栏/导航栏高度自适应布局
      • 统一跳转与提示工具集成

架构总览

导航栏组件通过小程序自定义组件机制挂载到页面,结合全局工具函数完成导航与交互。整体流程如下:

sequenceDiagram
participant Page as "页面"
participant Nav as "navbar 组件"
participant UI as "ui.ts 工具"
participant WX as "微信API"
Page->>Nav : 渲染 <navbar title/backgroundColor/showMenu/url/>
Nav->>Nav : 计算状态栏/导航栏高度并布局
Page->>Nav : 点击“返回”或“首页”
Nav->>UI : douPageTo(url)/wx.switchTab()
UI-->>WX : navigateBack / switchTab / redirectTo
Nav-->>Page : 更新标题/透明度等视图状态

图示来源

  • navbar.ts:59-77
  • ui.ts:30-64

详细组件分析

导航栏组件(navbar)

  • 组件结构与插槽
    • 左侧区域:内置返回与首页按钮(可通过 showMenu 控制显示),也支持 left 插槽插入自定义内容。
    • 中间区域:默认展示 title,也可通过 center 插槽完全自定义。
    • 右侧区域:right 插槽,用于放置更多操作项。
    • 背景层:独立背景 view,透明度由 scrollOpacity 驱动,标题默认跟随透明度变化。
  • 属性与数据
    • 属性
      • title:页面标题(字符串),支持空值处理
      • backgroundColor:背景色(默认白色)
      • titleColor:标题颜色(默认深色)
      • scrollOpacity:背景与标题透明度(0~1)
      • url:返回时的目标路径(可选)
      • showMenu:是否显示左侧菜单(默认显示)
    • 内部数据
      • 状态栏高度、导航栏高度、胶囊按钮高度、组合高度等,均取自全局 globalData
      • debugDot:调试入口圆点开关(受环境与服务器调试标志双门控)
  • 方法与事件
    • goBack:优先跳转到指定 url,否则回退上一级
    • goHome:切换到首页 TabBar
    • openDebug:进入调试信息页(满足条件时显示)
  • 样式要点
    • 固定定位、z-index 层级管理
    • 左右预留空间避免遮挡系统胶囊按钮
    • 标题居中且支持单行省略
    • 调试圆点位于全屏右侧垂直居中,外层容器不拦截点击
classDiagram
class Navbar {
+properties : title, backgroundColor, titleColor, scrollOpacity, url, showMenu
+data : statusBarHeight, navigationBarHeight, ... , debugDot
+methods : goBack(), goHome(), openDebug()
}
class Utils {
+douPageTo(url)
+douMsg(message, url, time)
+showShareMenu()
}
Navbar --> Utils : "调用跳转/提示"

图示来源

  • navbar.ts:12-77
  • ui.ts:30-73

导航栏使用示例(以页面为例)

  • 在页面模板中引入并使用组件,传入必要属性:
    • 设置标题、背景色、标题颜色
    • 根据业务决定是否显示左侧菜单
    • 为返回按钮指定目标 url(可选)
    • 通过 left/right 插槽扩展功能按钮
    • 通过 center 插槽替换默认标题
  • 在页面逻辑中控制滚动透明度:
    • 监听页面滚动,动态更新 scrollOpacity,实现背景渐显效果
  • 跳转与提示:
    • 使用工具函数进行统一跳转与 toast 提示,保证行为一致

依赖关系分析

  • 组件对全局配置的依赖
    • 应用配置启用自定义导航栏,并在全局 usingComponents 中注册 navbar
  • 组件对工具函数的依赖
    • 跳转与提示统一通过 ui.ts 的工具函数,确保 tabBar 与非 tabBar 页面的差异化处理
  • 组件对全局数据的依赖
    • 状态栏/导航栏尺寸来自 app.globalData,保证不同机型适配
graph LR
AppCfg["app.json<br/>usingComponents/window"] --> NavComp["navbar 组件"]
NavComp --> Uti["ui.ts<br/>douPageTo/douMsg"]
NavComp --> Gd["app.globalData<br/>尺寸/状态"]

图示来源

  • app.json:136-145
  • navbar.ts:40-48
  • ui.ts:30-64

性能与兼容性

  • 性能优化建议
    • 滚动透明度更新:使用节流/防抖减少 setData 频率,避免频繁重排
    • 图片资源:导航图标使用合适尺寸与 mode="heightFix",减少解码开销
    • 插槽内容:尽量保持轻量,避免在导航栏内渲染复杂列表或大图
    • 条件渲染:showMenu 与 debugDot 等布尔属性控制渲染范围,减少无用节点
  • 兼容性处理
    • 状态栏/导航栏高度:通过全局 globalData 获取,适配刘海屏与不同系统版本
    • 胶囊按钮避让:左右 padding 预留空间,避免内容被系统按钮遮挡
    • 跳转策略:统一使用 douPageTo,自动识别 tabBar 与非 tabBar 路径,避免栈异常
  • 主题与样式定制
    • 通过 backgroundColor/titleColor 快速切换主题
    • 通过 left/right/center 插槽注入品牌元素或操作按钮
    • 如需更深层定制,可在 wxss 中覆盖 .navigation/.bar/.menu 等类名

故障排查

  • 标题不显示或被截断
    • 检查 title 是否为空或超长;确认 center 插槽未覆盖默认标题
    • 参考:navbar.wxml:20-23
  • 返回按钮无效
    • 若设置了 url,将跳转到指定页面;未设置则回退上一页
    • 参考:navbar.ts:59-67
  • 滚动透明度不生效
    • 确认页面是否正确更新 scrollOpacity;避免过度频繁 setData
    • 参考:navbar.wxml:3-4
  • 调试圆点不出现
    • 需同时满足客户端非正式版与服务端调试开启;否则不会渲染
    • 参考:navbar.ts:50-57
  • 跳转后页面栈异常
    • 使用 douPageTo 统一跳转,避免手动调用 wx.navigateTo 导致栈不一致
    • 参考:ui.ts:30-47

结论

导航栏组件提供了稳定、可扩展的顶部导航方案,结合全局工具函数实现了统一的跳转与提示行为。通过属性与插槽的组合,既能满足常见场景的快速接入,也能支撑复杂业务的深度定制。配合合理的性能优化与兼容性处理,可在多机型上保持一致的用户体验。

附录:其他基础UI组件使用指南

以下为小程序开发中常用的基础UI组件使用建议与最佳实践。由于仓库未包含独立的组件封装,以下方法可直接复用或按需封装为组件。

  • 按钮(Button)
    • 属性:type、size、plain、loading、disabled、formType、openType
    • 事件:bindtap、bindgetuserinfo、bindopensetting 等
    • 样式:通过 class 覆盖默认样式,或使用 rpx 单位适配
    • 建议:禁用态与加载态明确反馈;长文本使用换行或省略
  • 输入框(Input)
    • 属性:value、placeholder、type、password、maxlength、focus、disabled
    • 事件:bindinput、bindconfirm、bindblur、bindfocus
    • 建议:键盘类型与输入限制匹配业务;提交前做前端校验
  • 弹窗(Modal/Dialog)
    • 使用 wx.showModal 或自定义 modal 组件
    • 属性:title、content、showCancel、cancelText、confirmText
    • 事件:success/fail/complete 回调
    • 建议:避免嵌套多层弹窗;异步操作时显示 loading
  • 加载器(Loading)
    • 使用 wx.showLoading 或自定义 spinner
    • 建议:长时间请求使用进度或骨架屏;及时关闭避免残留
  • Toast 提示
    • 使用 ui.ts 中的 douMsg,统一提示与跳转行为
    • 建议:短消息为主,避免打断用户操作流
  • 分享
    • 使用 ui.ts 中的 showShareMenu,开启转发与朋友圈分享
    • 建议:在 onShareAppMessage/onShareTimeline 中设置分享内容
添加日期:2026-10-05