个人技术总结——微信小程序自定义导航栏编程说明

222200214吴思 2024-12-14 23:06:05
这个作业属于哪个课程2401_CS_SE_FZU
这个作业要求在哪里软件工程实践总结&个人技术博客
这个作业的目标课程回顾与总结、个人技术总结
其他参考文献

目录

  • 一、技术概述
  • 二、技术详述
  • 2.1 配置app.json
  • 2.2 创建自定义导航栏组件
  • 2.3 样式设计
  • 2.4 逻辑实现
  • 2.5 页面引用
  • 2.6 流程图
  • 技术使用中遇到的问题和解决过程
  • 问题1
  • 问题2
  • 参考文献、参考博客(标题、作者、链接)。

一、技术概述

微信小程序自定义导航栏技术用于创建个性化的页面导航,以适应不同的业务需求和品牌形象。它在需要超越微信默认导航栏限制时使用,学习该技术可以提升用户体验和界面一致性。技术难点在于适配不同机型和确保导航栏与胶囊按钮对齐。

二、技术详述

2.1 配置app.json

设置"window"对象中的"navigationStyle"为"custom",以启用自定义导航栏。

"window": {
    "navigationStyle": "custom",
  },

2.2 创建自定义导航栏组件

在components目录下创建导航栏组件 custom_tab_bar,编写custom_tab_bar.json、custom_tab_bar.wxml、custom_tab_bar.wxss和custom_tab_bar.js文件。
custom_tab_bar.json

{
  "component": true
}

custom_tab_bar.wxml

<!--miniprogram/custom-tab-bar/index.wxml-->
<view class="tabbar flex-row">
  <!-- 中间的加号 -->
  <image src="/images/tab_add.png" mode="aspectFill" class="tabbar-item-icon2" bindtap="addPost"/>
  <!-- 两边四个图标 -->
  <view wx:for="{{list}}" wx:key="index" class="tabbar-item {{index===1 ? 'left' : index===2 ? 'right' : 'side'}}" data-path="{{item.pagePath}}" data-index="{{index}}" bindtap="switchTab">
    <image src="{{selected===index ? item.selectedIconPath : item.iconPath}}" mode="aspectFill" class="tabbar-item-icon1" />
  </view>
  <!-- 副菜单栏 -->
  <!--进行副菜单栏的-->
</view>

2.3 样式设计

navigationBar.wxss中定义导航栏的样式,包括高度、背景色、字体等。根据具体要求进行编程,此处省略。

2.4 逻辑实现

在navigationBar.js中编写逻辑,如跳转事件处理和状态管理。
custom_tab_bar.js
由于不好分割以及说明,我将大部分的代码放上来

Component({
  data: {
    selected: 0,
    showAdd: false,
    showAddSearch: false,
    list: [
      {
        "pagePath": "/pages/path1/path1",
        "iconPath": "/images/icon1.png",
        "selectedIconPath": "/images/icon1_on.png"
      },
     ......
      {
        "pagePath": "/pages/pathn/pathn",
        "iconPath": "/images/iconn.png",
        "selectedIconPath": "/images/iconn_on.png"
      }
    ]
  },
  attached() {
    const app = getApp();
    app.globalData.tabBars.push(this);
  }, 
  methods: {
    switchTab(e) {
      // 获取当前点击的tab的索引
      const index = e.currentTarget.dataset.index;
      if( index===1 ){
        // 按钮
        this.setData({
          showAdd: false,
          showAddSearch: !this.data.showAddSearch
        })
        // 设置 index
        const app = getApp();
        app.globalData.tabBars.forEach(tabBar => {
          tabBar.setData({
            selected: 1
          });
        });
      } else {    
        // 其他按钮
        this.setData({
          showAdd: false,
          showAddSearch: false
        })
        const data = e.currentTarget.dataset;
        const url = data.path;
        wx.switchTab({ url });
        const app = getApp();
        app.globalData.tabBars.forEach(tabBar => {
          tabBar.setData({
            selected: data.index
          });
        });
      }
    },
    // 中间按钮
    addPost: function () {
      this.setData({
        showAdd: !this.data.showAdd,
        showAddSearch: false
      })
    },
    /**
     * 副菜单栏的跳转
     */
  }
})

2.5 页面引用

在需要使用自定义导航栏的页面的js文件中引入该组件,并设置页面索引。
page.js

Page({
    onShow() {
      // 自定义tabbar
      console.log("index--onShow");
      const app = getApp();
      app.globalData.tabBars.forEach(tabBar => {
          tabBar.setData({
              selected: 3 // 根据需要设置为当前页面的索引
          });
      });
    },
});

2.6 流程图

技术使用中遇到的问题和解决过程

问题1

描述: 一开始对于点击中间加号按钮出现副菜单栏有点束手无策。
解决: addPost方法用于处理中间加号按钮的点击事件。当点击加号按钮时,切换showAdd的状态,从而显示或隐藏副菜单栏。同时,确保showAddSearch状态为false,以避免与搜索相关的副菜单同时显示。定义了navigateToNewCuisine和navigateToNewRecipe方法来处理副菜单栏中“新建菜谱”和“新建食谱”的导航逻辑,其都用到wx.navigateTo方法。点击这些选项时,会跳转到相应的页面,并关闭副菜单栏。

问题2

描述: 跳转页面之后,页面下标会跳回0
解决: 使用globalData全局变量来存储标签页组件实例。在switchTab方法中,根据点击的标签页索引更新了全局变量中每个标签页的selected状态。

参考文献、参考博客(标题、作者、链接)。

【微信小程序】page.json配置-自定义导航栏
为什么custom-tab-bar自定义后switchTab页面不加载OnLoad函数?
微信小程序自定义导航栏组件(完美适配所有手机),可自定义实现任何你想要的功能

...全文
285 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文介绍了一种基于多目标粒子群算法(MOPSO)的微电网优化调度模型,综合考虑风能、光伏、储能系统、柴油发电机、燃气轮机以及与主电网之间的能量交互等多种分布式能源的协同运行。通过构建以运行成本最小化、碳排放最低化和系统可靠性最优化为目标的多目标优化模型,利用Matlab平台实现MOPSO算法求解,完成对微电网在不同运行场景下的能量管理与调度方案优化。该模型能够有效平衡经济性与环保性之间的关系,适用于含多类型分布式电源的复杂微电网系统,具有较强的工程应用价值和科研参考意义; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及工程技术人员,尤其适合从事微电网、智能电网、综合能源系统、可再生能源集成与优化调度等领域研究的专业人士; 使用场景及目标:①用于多能源耦合微电网系统的协同优化调度研究;②支持多目标智能优化算法在能源系统中的建模与求解实践,帮助用户掌握MOPSO在实际工程问题中的应用方法;③为学术论文复现、毕业设计、科研项目开发提供完整的代码实例与技术支撑; 阅读建议:建议读者结合Matlab代码与理论文档,深入理解目标函数构建、约束条件处理及Pareto最优解集生成机制,重点关注算法参数设置、多目标权衡分析与结果可视化,并可通过调整能源配置或引入新约束进行二次开发与创新研究。

113

社区成员

发帖
与我相关
我的任务
社区描述
202401_CS_SE_FZU
软件工程 高校
社区管理员
  • FZU_SE_TeacherL
  • 助教_林日臻
  • 防震水泥
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧