mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-10-21 05:22:58 +08:00
185 lines
4.8 KiB
Markdown
185 lines
4.8 KiB
Markdown
# List 列表组件 API 文档
|
|
|
|
本文档由 `DeepSeek` 生成并微调。
|
|
|
|
## 组件描述
|
|
|
|
列表组件用于展示可选择的项目列表,内置滚动条功能和选中项高亮效果。适用于菜单选择、内容导航、设置选项等场景。
|
|
|
|
---
|
|
|
|
## Props 属性说明
|
|
|
|
| 属性名 | 类型 | 默认值 | 描述 |
|
|
| ------------ | -------------------- | ------ | ------------------------------- |
|
|
| `list` | `[string, string][]` | 必填 | 列表内容,[id, 显示文本] 的数组 |
|
|
| `selected` | `string` | 必填 | 当前选中的项 ID |
|
|
| `loc` | `ElementLocator` | 必填 | 列表的位置和尺寸 |
|
|
| `lineHeight` | `number` | `18` | 每行的高度 |
|
|
| `font` | `Font` | - | 列表项的字体样式 |
|
|
| `winskin` | `ImageIds` | - | 使用 winskin 作为光标背景 |
|
|
| `color` | `CanvasStyle` | - | 使用指定样式作为光标背景 |
|
|
| `border` | `CanvasStyle` | - | 使用指定样式作为光标边框 |
|
|
| `alphaRange` | `[number, number]` | - | 选择图标的不透明度范围 |
|
|
|
|
---
|
|
|
|
## Events 事件说明
|
|
|
|
| 事件名 | 参数类型 | 触发时机 |
|
|
| ----------------- | ----------------- | ---------------------- |
|
|
| `update` | `(key: string)` | 当用户选中某一项时触发 |
|
|
| `update:selected` | `(value: string)` | v-model 双向绑定事件 |
|
|
|
|
---
|
|
|
|
## Slots 插槽说明
|
|
|
|
无插槽
|
|
|
|
---
|
|
|
|
## Exposed Methods 暴露方法
|
|
|
|
无暴露方法
|
|
|
|
---
|
|
|
|
## 使用示例
|
|
|
|
### 基础用法 - 简单列表
|
|
|
|
```tsx
|
|
import { defineComponent, ref } from 'vue';
|
|
import { List } from '@user/client-modules';
|
|
|
|
export const MyCom = defineComponent(() => {
|
|
const selectedItem = ref('item1');
|
|
|
|
// 列表数据:[id, 显示文本]
|
|
const listData = [
|
|
['item1', '第一项'],
|
|
['item2', '第二项'],
|
|
['item3', '第三项'],
|
|
['item4', '第四项']
|
|
];
|
|
|
|
const handleSelect = (key: string) => {
|
|
console.log('选中项:', key);
|
|
selectedItem.value = key;
|
|
};
|
|
|
|
return () => (
|
|
<List
|
|
list={listData}
|
|
v-model:selected={selectedItem.value}
|
|
loc={[0, 0, 100, 300, 0, 0]}
|
|
selected={selectedItem.value}
|
|
onUpdate={handleSelect}
|
|
/>
|
|
);
|
|
});
|
|
```
|
|
|
|
### 带样式的列表
|
|
|
|
```tsx
|
|
import { defineComponent, ref } from 'vue';
|
|
import { List } from '@user/client-modules';
|
|
|
|
export const StyledListCom = defineComponent(() => {
|
|
const selected = ref('opt2');
|
|
|
|
const options = [
|
|
['opt1', '开始游戏'],
|
|
['opt2', '游戏设置'],
|
|
['opt3', '帮助文档'],
|
|
['opt4', '关于我们']
|
|
];
|
|
|
|
return () => (
|
|
<List
|
|
list={options}
|
|
v-model:selected={selected.value}
|
|
loc={[0, 0, 100, 300, 0, 0]}
|
|
lineHeight={24}
|
|
color="#e3f2fd"
|
|
border="#2196f3"
|
|
borderWidth={1}
|
|
/>
|
|
);
|
|
});
|
|
```
|
|
|
|
### 使用皮肤图片的列表
|
|
|
|
```tsx
|
|
import { defineComponent, ref } from 'vue';
|
|
import { List } from '@user/client-modules';
|
|
|
|
export const SkinnedListCom = defineComponent(() => {
|
|
const currentSelection = ref('cat');
|
|
|
|
const animalList = [
|
|
['cat', '猫咪'],
|
|
['dog', '小狗'],
|
|
['bird', '小鸟'],
|
|
['fish', '小鱼']
|
|
];
|
|
|
|
const handleUpdate = key => {
|
|
const item = animalList.find(item => item[0] === key)?.[1];
|
|
currentSelection.value = key;
|
|
console.log('选择了:', item);
|
|
};
|
|
|
|
return () => (
|
|
<List
|
|
list={animalList}
|
|
selected={currentSelection.value}
|
|
loc={[0, 0, 100, 300, 0, 0]}
|
|
winskin="winskin.png"
|
|
lineHeight={20}
|
|
onUpdate={handleUpdate}
|
|
/>
|
|
);
|
|
});
|
|
```
|
|
|
|
### 长列表滚动示例
|
|
|
|
```tsx
|
|
import { defineComponent, ref } from 'vue';
|
|
import { List } from '@user/client-modules';
|
|
|
|
export const ScrollListCom = defineComponent(() => {
|
|
const selected = ref('item5');
|
|
|
|
// 创建长列表数据
|
|
const longList = Array.from({ length: 20 }, (_, i) => [
|
|
`item${i + 1}`,
|
|
`列表项 ${i + 1}`
|
|
]);
|
|
|
|
return () => (
|
|
<List
|
|
list={longList}
|
|
v-model:selected={selected.value}
|
|
loc={[0, 0, 100, 300, 0, 0]}
|
|
lineHeight={20}
|
|
color="#fff3e0"
|
|
border="#ff9800"
|
|
/>
|
|
);
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
## 注意事项
|
|
|
|
1. **数据格式**: `list` 属性需要 `[id, text]` 格式的二维数组
|
|
2. **选中状态**: `selected` 需要与列表项中的 id 匹配
|
|
3. **滚动支持**: 自动显示滚动条
|
|
4. **样式优先级**: 如果设置了 `winskin`,则 `color` 和 `border` 设置将失效
|