当前位置:首页 > uni-app

uniapp分类菜单

2026-03-05 03:42:53uni-app

uniapp分类菜单实现方法

横向滚动分类菜单

使用scroll-view组件实现横向滚动效果,结合flex布局展示分类项。示例代码:

<scroll-view scroll-x class="category-scroll">
  <view class="category-item" v-for="(item, index) in categories" :key="index">
    {{item.name}}
  </view>
</scroll-view>
.category-scroll {
  white-space: nowrap;
  width: 100%;
}
.category-item {
  display: inline-block;
  padding: 10px 15px;
  margin-right: 10px;
  background-color: #f5f5f5;
  border-radius: 15px;
}

左侧分类+右侧内容布局

采用flex布局分为左右两部分,左侧固定宽度显示分类,右侧展示对应内容:

<view class="container">
  <scroll-view scroll-y class="left-menu">
    <view v-for="(item,index) in menuList" :key="index" 
          @click="changeMenu(index)" 
          :class="['menu-item', activeIndex===index?'active':'']">
      {{item.name}}
    </view>
  </scroll-view>

  <scroll-view scroll-y class="right-content">
    <!-- 动态内容 -->
  </scroll-view>
</view>
.container {
  display: flex;
  height: 100vh;
}
.left-menu {
  width: 25%;
  background: #f8f8f8;
}
.right-content {
  width: 75%;
}
.menu-item {
  padding: 15px;
  text-align: center;
}
.active {
  color: #ff0000;
  background: #fff;
}

多级分类菜单

实现嵌套式多级分类结构,使用递归组件或多层v-for:

<view class="multi-level">
  <view v-for="(item,index) in categories" :key="index" class="level1">
    <view @click="toggleSub(index)" class="level1-title">
      {{item.name}}
      <uni-icons :type="item.expand?'arrowup':'arrowdown'"></uni-icons>
    </view>
    <view v-show="item.expand" class="level2">
      <view v-for="(sub,subIndex) in item.children" :key="subIndex" class="level2-item">
        {{sub.name}}
      </view>
    </view>
  </view>
</view>

动态数据绑定

在script部分定义分类数据和处理方法:

export default {
  data() {
    return {
      activeIndex: 0,
      categories: [
        {name: '全部', id: 0},
        {name: '食品', id: 1},
        {name: '电子产品', id: 2}
      ],
      menuList: [
        {name: '分类1', children: [...]},
        {name: '分类2', children: [...]}
      ]
    }
  },
  methods: {
    changeMenu(index) {
      this.activeIndex = index
      // 加载对应内容
    },
    toggleSub(index) {
      this.$set(this.menuList[index], 'expand', !this.menuList[index].expand)
    }
  }
}

性能优化建议

分类数据较多时使用虚拟列表技术,通过uni-app的组件或第三方组件如mescroll-uni实现懒加载

添加分类图标增强视觉效果,使用uni-icons组件或自定义图片:

uniapp分类菜单

<view class="category-with-icon">
  <uni-icons type="home" size="20"></uni-icons>
  <text>首页</text>
</view>

标签: 菜单uniapp
分享给朋友:

相关文章

uniapp 消息推送

uniapp 消息推送

uniapp 消息推送实现方法 使用uniPush服务 uniapp官方提供了uniPush服务,支持iOS、Android及小程序平台的消息推送。需要在manifest.json中配置推送模块,并按…

uniapp模板库

uniapp模板库

uniapp模板库推荐 官方模板库 uni-app官方提供多个模板,涵盖电商、社交、新闻等多个领域。这些模板可直接在HBuilderX中通过新建项目选择,包含基础结构和常用功能模块,适合快速启动项目。…

uniapp视频

uniapp视频

uniapp视频开发基础 uniapp支持通过video组件实现视频播放功能,该组件兼容多端(H5、小程序、App等),基本用法如下: <template> <video…

uniapp设置title

uniapp设置title

设置页面标题的方法 在UniApp中设置页面标题可以通过以下几种方式实现,适用于不同场景和需求。 通过pages.json配置 在pages.json文件中,可以为每个页面单独配置导航栏标题。找到对…

uniapp判断手机定位是否开启

uniapp判断手机定位是否开启

判断手机定位是否开启的方法 在UniApp中判断手机定位是否开启,可以通过调用原生API或使用第三方插件实现。以下是几种常见的方法: 使用uni.getLocation检测定位状态 通过调用uni.…

uniapp gpio

uniapp gpio

在 uniapp 中直接操作 GPIO(通用输入输出)通常需要依赖原生平台的硬件接口,因为 uniapp 本身是基于前端技术的跨平台框架,不直接提供硬件访问能力。以下是实现 GPIO 控制的几种方法:…