Skip to content

Commit 5891e00

Browse files
committed
* picker: add customPicker implementation with enhanced display and click handling in README
1 parent 6e95de0 commit 5891e00

2 files changed

Lines changed: 62 additions & 97 deletions

File tree

lib/picker/README.md

Lines changed: 29 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -110,110 +110,42 @@ console.log('> multiPicker', multiPicker);
110110
<div id="multiPicker"></div>
111111
```
112112

113-
## 使用方法
113+
## 复杂交互例子
114114

115+
下面的例子默认点击提供额外的自定义操作,下拉面板需要点击右侧的图标按钮来打开。
115116

116-
## 引入
117-
118-
### 通过 npm
119-
120-
```js
121-
import {Picker} from 'zui/picker';
122-
123-
const picker = new Picker(element, options);
124-
```
125-
126-
### 通过全局对象 `zui`
127-
128-
```js
129-
const picker = new zui.Picker(element, options);
130-
```
131-
132-
### 使用 React 组件
133-
134-
```jsx
135-
import {render} from 'react';
136-
import {Picker} from 'zui/picker/react';
137-
138-
render(element, <Picker {...options} />);
117+
```html:example
118+
<div id="customPicker" class="w-40"></div>
139119
```
140120

141-
### 使用 jQuery 扩展
142-
143121
```js
144-
$(element).picker(options);
122+
const customPicker = new Picker('#customPicker', {
123+
items,
124+
placeholder: '请选择你的最爱',
125+
required: true,
126+
search: false,
127+
className: 'picker-btn state',
145128

146-
const picker = $(element).data('zui.picker');
147-
```
129+
// 在下拉菜单内显示搜索框
130+
menu: {
131+
searchBox: true,
132+
search: undefined,
133+
},
148134

149-
## 更新下拉列表
135+
// 自定义下拉菜单控件显示
136+
display: (value, selections) => {
137+
return {html: `<div>你选择了:${selections.map(x => x.text).join(',')}</div><style>.picker-btn {box-shadow: none!important;outline:none}.picker-btn .caret{display:none}</style><button type="button" class="picker-btn-trigger btn size-xs square"><i class="icon icon-exchange">↓</i></button>`, className: 'flex justify-between gap-2 p-px'};
138+
},
150139

151-
调用菜单组件实例上的 `render` 方法来更新下拉列表,并重新进行渲染:
140+
// 自定义点击事件
141+
onClick: (event) => {
142+
if ($(event.target).closest('.picker-btn-trigger').length) {
143+
return;
144+
}
152145

153-
```js
154-
Picker.render(options);
146+
event.preventDefault();
147+
// 执行自定义操作
148+
console.log('> customPicker.onClick', event);
149+
},
150+
});
155151
```
156-
157-
## 下拉面板宽度
158-
159-
## 下拉多选
160-
161-
## 全选 取消全选
162-
163-
## 可搜索
164-
165-
## 选项
166-
167-
| 属性名称 | 含义 | 类型 | 默认值 |
168-
| ----------------- |:----------------:| ----- |----- |
169-
| `multiple` | 是否可多选 | `boolean` | `false` |
170-
| `showSearch` | 是否可搜索 | `boolean` | `false` |
171-
| `defaultValue` | 组件默认展示项 | `string` ||
172-
| `placeholder` | 占位符 | `string` ||
173-
| `disabled` | 禁用状态 | `boolean` | `false` |
174-
| `clearable` | 允许清除单选值 | `boolean` | `false` |
175-
| `items` | 下拉列表 | `array` | `[]` |
176-
| `autoSelectFirst` | 是否自动选中第一项 | `boolean` | `false` |
177-
| `dropWidth` | 下拉面板宽度 | `string` | `100%` |
178-
| `minDropWidth` | 下拉面板最小宽度 | `string` | `100` |
179-
| `maxDropWidth` | 下拉面板最大宽度 | `string` | `450` |
180-
| `maxDropHeight` | 下拉面板最大高度 | `number` | `260` |
181-
182-
### `items` 单项属性
183-
184-
| 属性名称 | 含义 | 类型 | 默认值 |
185-
| ----------------- |:-------------------:| -------- |----- |
186-
| `title` | 名称 | `string` | |
187-
| `icon` | 图标 | `string` | |
188-
| `disabled` | 禁用状态 | `boolean` | `false` |
189-
| `trailingIcon` | 后缀图标 | `string` | |
190-
| `className` | 类名 | `string` | |
191-
| `key` | 键值 | `string` | |
192-
| `style` | 样式 | `object` | |
193-
194-
195-
## 方法
196-
197-
### focus()
198-
199-
激动下拉选择器。
200-
201-
### setValue()
202-
203-
动态设置选中的值。
204-
205-
### getValue()
206-
207-
获取选中的值。
208-
209-
### onChange()
210-
211-
当值变更后时触发。
212-
213-
### show()
214-
215-
展示下拉选择器。
216-
217-
### hide()
218-
219-
隐藏下拉选择器。

lib/picker/dev.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import '@zui/menu';
55
import '@zui/form-control';
66
import '@zui/checkbox';
77
import '@zui/avatar';
8+
import '@zui/search-box';
9+
import '@zui/input-control';
810
import '@zui/tree';
911
import {Picker} from './src/main';
1012
import {$} from '@zui/core';
@@ -196,4 +198,35 @@ onPageUpdate(() => {
196198
display: '已选择 {count} 项',
197199
});
198200
console.log('> noSearchMultiPicker', noSearchMultiPicker);
201+
202+
const customPicker = new Picker('#customPicker', {
203+
items,
204+
placeholder: '请选择你的最爱',
205+
required: true,
206+
search: false,
207+
className: 'picker-btn state',
208+
209+
// 在下拉菜单内显示搜索框
210+
menu: {
211+
searchBox: true,
212+
search: undefined,
213+
},
214+
215+
// 自定义下拉菜单控件显示
216+
display: (value, selections) => {
217+
return {html: `<div>你选择了:${selections.map(x => x.text).join(',')}</div><style>.picker-btn {box-shadow: none!important;outline:none}.picker-btn .caret{display:none}</style><button type="button" class="picker-btn-trigger btn size-xs square"><i class="icon icon-exchange">↓</i></button>`, className: 'flex justify-between gap-2 p-px'};
218+
},
219+
220+
// 自定义点击事件
221+
onClick: (event) => {
222+
if ($(event.target).closest('.picker-btn-trigger').length) {
223+
return;
224+
}
225+
226+
event.preventDefault();
227+
// 执行自定义操作
228+
console.log('> customPicker.onClick', event);
229+
},
230+
});
231+
console.log('> customPicker', customPicker);
199232
});

0 commit comments

Comments
 (0)