更新记录

1.0.7(2026-10-10) 下载此版本

  1. 【修复】list 清空或变短时残留脏状态、误发非法下标
  2. 【修复】分组高度缓存改按 id 键控,动态增删 / 排序分组后定位不再失准(动态场景请保证 id 唯一)
  3. 【修复】虚拟渲染长距离跳转落点偏移、左右错位,现可精确落点
  4. 【修复】选中滑块拦截点击,导致"重复点击同一菜单回位"未生效
  5. 【修复】回填真实高度时滚动跳动 / 锚点失准,新增滚动锚定补偿
  6. 【优化】refresh() 返回 Promise,便于数据变更后精确重定位

1.0.6(2026-07-26) 下载此版本

  1. 【新增】分组级虚拟渲染,默认开启,可通过 :virtual="false" 关闭,大数据量下大幅减少节点数
  2. 【新增】v-model:current 受控选中、scrollToIndex / refresh 实例方法
  3. 【新增】showTitle 分组吸顶标题(支持 title 插槽自定义)、menu 菜单项插槽、empty 空数据插槽
  4. 【新增】scrolltolower 触底事件透传、menuWidth / scrollWithAnimation 配置项
  5. 【优化】change 事件在滚动切换分类时同样触发,新增 index、source 字段(currenIndex 保留兼容)
  6. 【修复】数据异步加载或动态更新后联动失效(自动监听 list 重新测量)
  7. 【修复】组件不在页面顶部时锚点定位整体偏移
  8. 【修复】重复点击同一菜单无法回位、程序化滚动过程中左侧高亮抖动
  9. 【修复】list 动态变短时下标越界导致渲染异常;替换已废弃的 getSystemInfoSync
  10. 【文档】修正示例中 :height 应为 virtualMenuHeight、leftBarStyle 与 leftBarUnStyle 说明写反的问题

1.0.5(2025-08-07) 下载此版本

1.优化左侧菜单滚动效果 2.修复小程序滚动异常

查看更多

平台兼容性

uni-app

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× √ √ √ √ - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
√ - - - - - - - - - - -

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × √ ×

sk-linkage-menu

扫码体验

https://cdn.sanity.io/images/vrmep2m5/production/33d80d6b725f9793d0f454315ddb2b6f71381136-430x430.jpg

基础使用

<template>
    <view>
        <sk-linkage-menu :list="state.test" :virtual-menu-height="500">
            <template v-slot="{data}">
                <view>
                    <view class="class-item">
                        <view class="thumb-box item-food">
                            <view class="left-info">
                                <image :src="data.image" class="item-image"></image>
                            </view>
                            <view class="right-info">
                                <view class="goods-title"> {{ data.name }}</view>
                            </view>
                        </view>
                    </view>
                </view>
            </template>
        </sk-linkage-menu>
    </view>
</template>
<script lang="ts">
    import { onMounted, reactive } from 'vue'
    type stateType = {
        test : any
    }
    export default{
        setup(props) {
            const state = reactive<stateType>({
                test: [],
            })

            onMounted(() => {
                for (let index = 0; index < 100; index++) {
                    state.test.push({
                        name: `${index}号`,
                        data: [
                            {
                                classify: `${index}号2`,
                                lazyLoad: false,
                                defaut: '/static/image/commer/defaut.png',
                                id: index,
                            },
                            {
                                classify: `${index}号`,
                                lazyLoad: false,
                                defaut: '/static/image/commer/defaut.png',
                                id: index,
                            },
                        ],
                    })
                }
            })
            return {
                state,
            }
        },
    }
</script>

API 参考

Props

属性名 类型 默认值 说明
virtualMenuHeight Number 窗口高度 - 44 组件可视高度(px)
list MenuDataItem[] [] 菜单数据,结构见下方 MenuDataItem
virtual Boolean true 分组级虚拟渲染开关,大数据量建议保持开启
current Number 0 当前选中菜单下标,支持 v-model:current
showTitle Boolean false 是否显示右侧分组吸顶标题
menuWidth String '180rpx' 左侧菜单宽度
scrollWithAnimation Boolean true 右侧程序化滚动是否使用动画
leftBarStyle Object - 左侧选中滑块样式
leftBarUnStyle Object - 左侧未选中菜单项样式
itemHeight Number 130 已废弃:分组高度改为自动测量,保留仅为兼容旧版
loading Boolean false 异步拉数据期间置 true,右侧展示 loading 插槽;首帧测量完成前组件也会自动展示
estimatedGroupHeight Number 300 未测量分组的高度估算值(px),虚拟渲染用它撑高占位

Events

事件名 说明 回调参数
change 选中分类变化时触发(点击、滚动、方法调用均会触发) { ...item, index, currenIndex, source },source 为 click / scroll / method
update:current 选中下标变化,配合 v-model:current 使用 index: number
scrolltolower 右侧内容区滚动触底,可用于分页加载。分页场景建议各分组条数尽量均匀,并将 estimatedGroupHeight 调整为接近真实分组高度,以获得更稳定的滚动与锚定体验 原生事件对象

Slots

插槽名 说明 作用域参数
default 右侧内容项,每条数据渲染一次 { data }(分组与内容项字段合并)
menu 左侧菜单项,可自定义图标/角标 { item, index, active }
title 右侧分组吸顶标题(需开启 showTitle) { item, index }
empty list 为空时的占位内容 -
loading 加载态(loading 为 true 或首帧未就绪时)自定义内容,默认居中转圈 + 文字 -

Methods(通过 ref 调用)

方法名 说明 参数
scrollToIndex 程序化跳转到指定菜单 index: number
refresh 重新测量布局。数据变更后组件会自动调用,插槽内容高度变化(如图片撑高)时可手动调用;返回 Promise,在本轮测量完成后 resolve,可用于数据变更后的精确重定位 -

MenuDataItem 类型

属性名 类型 必填 说明
name String 是 左侧菜单名称
data Array 是 右侧内容列表
id Number/String 建议 唯一标识,优先作为渲染 key

壁纸小程序

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议