Skip to content

xtf-home-sheet

组件说明

xtf-home-sheet 是首页底部面板组件,类似地图应用的底部可拖拽面板。支持多档位停靠、拖拽切换和滚动锁定,适用于首页信息展示、地图底部面板和可折叠内容区等场景。


基础用法

1. 基础用法

通过 modelValue 控制当前档位(从 0 开始),通过 stops 设置停靠比例:

vue
<template>
  <xtf-home-sheet v-model="sheetIndex" :stops="[0.22, 0.48, 0.88]">
    <view class="content">
      <xtf-text level="title" bold text="推荐服务" />
      <xtf-grid :items="serviceItems" :columns="4" icon-size="lg" />
    </view>
  </xtf-home-sheet>
</template>

<script>
export default {
  data() {
    return {
      sheetIndex: 1,
      serviceItems: [
        { icon: 'receipt_long', title: '账单' },
        { icon: 'account_balance_wallet', title: '钱包' },
        { icon: 'local_atm', title: '提现' },
        { icon: 'analytics', title: '统计' }
      ]
    }
  }
}
</script>

2. 不可拖拽

通过 draggable 禁用手动拖拽:

vue
<template>
  <xtf-home-sheet v-model="sheetIndex" :draggable="false">
    <view class="content">
      <xtf-text text="固定面板内容" />
    </view>
  </xtf-home-sheet>
</template>

<script>
export default {
  data() {
    return {
      sheetIndex: 0
    }
  }
}
</script>

3. 自定义头部、手柄与档位控制

vue
<template>
  <view>
    <xtf-button label="展开面板" @click="$refs.sheet.expand()" />
    <xtf-home-sheet
      ref="sheet"
      v-model="index"
      lock-scroll-until-expanded
      @update:modelValue="onUpdate"
      @change="onChange"
    >
      <template #handle><xtf-icon name="expand_more" theme="secondary" /></template>
      <template #header><xtf-text text="附近服务" level="title" bold /></template>
      <xtf-text text="面板主体内容" />
    </xtf-home-sheet>
  </view>
</template>

<script>
export default {
  data() {
    return { index: 0 }
  },
  methods: {
    onUpdate(value) {
      console.log('update', value)
    },
    onChange(value) {
      uni.showToast({ title: '档位 ' + value, icon: 'none' })
    }
  }
}
</script>

全部属性

属性类型默认值作用描述适用范围
modelValueString | Number1当前档位索引双向绑定
stopsArray[0.22, 0.48, 0.88]停靠比例数组档位
topInsetString | Number24顶部安全距离安全区
durationString | Number240动画时长(ms)动画
draggableBooleantrue是否可拖拽交互
maskClosableBooleanfalse当前遮罩层设置了 pointer-events: none,该属性暂不能通过点击遮罩关闭面板当前实现限制
lockScrollUntilExpandedBooleanfalse展开前锁定滚动滚动
customClassString''自定义类名样式覆盖
customStyleString | Object''自定义样式动态样式覆盖

事件

事件名称触发时机回调参数参数说明
update:modelValue档位变化时触发(index)新档位索引
change档位变化时触发(index)新档位索引

插槽

插槽名称说明
default面板内容
handle自定义拖拽手柄
header面板头部

第三个示例展示了所有具名插槽的可运行用法。


方法

| 方法名 | 参数 | 返回值 | 说明 | | --- | --- | --- | | collapse | - | - | 收起到第 0 档 | | expand | - | - | 展开到最高档 | | open | (index: Number) | - | 切换至指定档位 |


主题说明

  • 面板顶部圆角 36rpx
  • 遮罩透明度随面板位置动态变化
  • 拖拽手柄为灰色圆角条

如需全局调整主题,请在 xtf-config-provider 或主题配置中覆盖相关 CSS 变量。

MIT Licensed