当前位置:首页 > uni-app

uniapp分类菜单

2026-02-06 01:59:34uni-app

实现UniApp分类菜单的方法

使用uni-ui的uni-list组件 在UniApp中可以通过uni-ui提供的组件快速实现分类菜单效果。安装uni-ui后,在pages.json中引入组件:

"easycom": {
  "autoscan": true,
  "custom": {
    "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue"
  }
}

页面模板中使用:

<uni-list>
  <uni-list-item title="食品分类" showArrow />
  <uni-list-item title="电子产品" showArrow />
  <uni-list-item title="服装配饰" showArrow>
    <template v-slot:footer>
      <uni-tag text="热销" type="error" />
    </template>
  </uni-list-item>
</uni-list>

自定义侧边栏分类 通过flex布局实现左右分栏的经典分类菜单:

uniapp分类菜单

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

  <scroll-view scroll-y class="right-content">
    <view v-for="sub in subCategories" :key="sub.id">
      <text class="sub-title">{{sub.name}}</text>
      <view class="goods-list">
        <!-- 商品项循环 -->
      </view>
    </view>
  </scroll-view>
</view>

对应CSS样式:

.menu-container {
  display: flex;
  height: 100vh;
}
.left-menu {
  width: 25%;
  background: #f8f8f8;
}
.menu-item {
  padding: 20rpx;
  text-align: center;
  &.active {
    color: #ff5500;
    background: #fff;
    border-left: 4rpx solid #ff5500;
  }
}
.right-content {
  width: 75%;
  padding: 20rpx;
}

数据绑定处理 在script部分处理分类数据交互:

uniapp分类菜单

export default {
  data() {
    return {
      categories: [
        {id:1, name:'生鲜食品'},
        {id:2, name:'数码家电'},
        {id:3, name:'美妆个护'}
      ],
      activeIndex: 0,
      subCategories: []
    }
  },
  methods: {
    changeCategory(index) {
      this.activeIndex = index
      // 模拟获取子分类
      this.subCategories = this.getSubCategories(this.categories[index].id)
    },
    getSubCategories(parentId) {
      // 实际项目中应调用接口获取数据
      const mockData = {
        1: [
          {id:11, name:'新鲜水果'},
          {id:12, name:'海鲜水产'}
        ],
        2: [
          {id:21, name:'手机通讯'},
          {id:22, name:'电脑配件'}
        ]
      }
      return mockData[parentId] || []
    }
  }
}

添加交互效果 增强用户体验的交互方案:

// 在onLoad中初始化数据
onLoad() {
  this.changeCategory(0)
  // 或者调用接口获取分类数据
  uni.request({
    url: 'https://api.example.com/categories',
    success: (res) => {
      this.categories = res.data
    }
  })
}

优化性能的方案 对于大量分类数据的情况:

// 使用计算属性避免重复计算
computed: {
  currentSubCategories() {
    return this.getSubCategories(this.categories[this.activeIndex]?.id)
  }
}

注意事项

  • 滚动区域需要设置固定高度
  • 小程序端scroll-view组件必须指定高度
  • 分类数据量大时可考虑分页加载
  • H5端注意处理滚动穿透问题

以上方案可根据实际项目需求进行组合或调整,uni-ui提供了丰富的组件可以快速构建分类界面,而自定义方案则具有更高的灵活性。

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

相关文章

uniapp开发

uniapp开发

uniapp开发简介 uniapp是一款基于Vue.js的跨平台开发框架,支持一次开发,多端部署。开发者可以通过编写一套代码,发布到iOS、Android、Web以及各种小程序平台(如微信、支付宝、百…

uniapp使用npm

uniapp使用npm

uniapp中使用npm的方法 uniapp支持通过npm安装和管理第三方依赖包,以下是具体操作步骤: 安装Node.js环境 确保本地已安装Node.js(建议使用LTS版本),安装后会自动包含n…

uniapp支付功能怎么实现

uniapp支付功能怎么实现

uniapp支付功能实现方法 准备工作 注册微信支付、支付宝等平台的开发者账号,获取必要的商户ID(mch_id)、API密钥(key)、应用ID(appid)等信息。确保项目已配置好相关支付SDK。…

uniapp可以用vant吗

uniapp可以用vant吗

uniapp中使用Vant组件库的可行性 Vant是专为Vue.js设计的移动端组件库,而uniapp是一个跨平台开发框架。两者并非原生兼容,但可通过以下方式实现部分Vant组件的使用。 方法一:使…

uniapp 头条

uniapp 头条

uniapp 适配今日头条(字节跳动小程序)的方法 环境配置 确保HBuilderX版本在2.7.0以上,manifest.json中勾选"字节跳动小程序"平台。在开发者工具中配置正确的AppID和项…

vue实现菜单定位

vue实现菜单定位

Vue实现菜单定位的方法 使用scrollIntoView方法 通过监听菜单点击事件,获取目标元素的DOM节点,调用scrollIntoView方法实现平滑滚动定位。需配合ref获取DOM节点。 m…