@gmcb/uv-ui 0.2.26 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/LICENSE +21 -21
- package/README.md +95 -141
- package/components/uv-overlay/props.js +29 -24
- package/components/uv-overlay/uv-overlay.vue +87 -85
- package/docs/api/configs/color.md +52 -0
- package/docs/api/index.md +77 -0
- package/docs/api/mixins/mpShare.md +95 -0
- package/docs/api/request/apiManage.md +88 -0
- package/docs/api/request/http.md +451 -0
- package/docs/api/utils/colorSwitch.md +78 -0
- package/docs/api/utils/debounce.md +104 -0
- package/docs/api/utils/fastUse.md +246 -0
- package/docs/api/utils/getRect.md +238 -0
- package/docs/api/utils/guid.md +41 -0
- package/docs/api/utils/index.md +55 -0
- package/docs/api/utils/intro.md +25 -0
- package/docs/api/utils/object.md +171 -0
- package/docs/api/utils/queryParams.md +68 -0
- package/docs/api/utils/random.md +23 -0
- package/docs/api/utils/randomArray.md +28 -0
- package/docs/api/utils/route.md +121 -0
- package/docs/api/utils/test.md +237 -0
- package/docs/api/utils/time.md +81 -0
- package/docs/api/utils/trim.md +24 -0
- package/docs/components/actionSheet.md +236 -0
- package/docs/components/addQQGroup.md +5 -0
- package/docs/components/album.md +91 -0
- package/docs/components/alert.md +83 -0
- package/docs/components/avatar.md +152 -0
- package/docs/components/backTop.md +181 -0
- package/docs/components/badge.md +117 -0
- package/docs/components/button.md +196 -0
- package/docs/components/calendar.md +398 -0
- package/docs/components/calendars.md +294 -0
- package/docs/components/cell.md +185 -0
- package/docs/components/checkbox.md +281 -0
- package/docs/components/circleProgress.md +5 -0
- package/docs/components/code.md +162 -0
- package/docs/components/codeInput.md +175 -0
- package/docs/components/collapse.md +250 -0
- package/docs/components/color.md +324 -0
- package/docs/components/common.md +126 -0
- package/docs/components/countDown.md +166 -0
- package/docs/components/countTo.md +140 -0
- package/docs/components/datetimePicker.md +283 -0
- package/docs/components/diff1.x.md +190 -0
- package/docs/components/divider.md +88 -0
- package/docs/components/downloadSetting.md +54 -0
- package/docs/components/dropDown.md +375 -0
- package/docs/components/empty.md +99 -0
- package/docs/components/feature.md +261 -0
- package/docs/components/form.md +736 -0
- package/docs/components/gap.md +49 -0
- package/docs/components/grid.md +225 -0
- package/docs/components/icon.md +101 -0
- package/docs/components/image.md +182 -0
- package/docs/components/index.md +110 -0
- package/docs/components/indexList.md +133 -0
- package/docs/components/input.md +250 -0
- package/docs/components/install.md +59 -0
- package/docs/components/intro.md +32 -0
- package/docs/components/keyboard.md +226 -0
- package/docs/components/layout.md +310 -0
- package/docs/components/line.md +85 -0
- package/docs/components/lineProgress.md +141 -0
- package/docs/components/link.md +89 -0
- package/docs/components/list.md +223 -0
- package/docs/components/loadMore.md +140 -0
- package/docs/components/loadingIcon.md +144 -0
- package/docs/components/loadingPage.md +92 -0
- package/docs/components/modal.md +230 -0
- package/docs/components/more.md +13 -0
- package/docs/components/navbar.md +192 -0
- package/docs/components/noNetwork.md +116 -0
- package/docs/components/noticeBar.md +131 -0
- package/docs/components/notify.md +204 -0
- package/docs/components/npmSetting.md +64 -0
- package/docs/components/numberBox.md +257 -0
- package/docs/components/nvue.md +170 -0
- package/docs/components/overlay.md +117 -0
- package/docs/components/parse.md +204 -0
- package/docs/components/pickColor.md +112 -0
- package/docs/components/picker.md +357 -0
- package/docs/components/popup.md +221 -0
- package/docs/components/problem.md +300 -0
- package/docs/components/qrcode.md +169 -0
- package/docs/components/quickstart.md +33 -0
- package/docs/components/radio.md +256 -0
- package/docs/components/rate.md +128 -0
- package/docs/components/read.md +163 -0
- package/docs/components/readMore.md +227 -0
- package/docs/components/resource.md +17 -0
- package/docs/components/scrollList.md +218 -0
- package/docs/components/search.md +160 -0
- package/docs/components/setting.md +111 -0
- package/docs/components/settingDesc.md +66 -0
- package/docs/components/skeleton.md +105 -0
- package/docs/components/skeletons.md +323 -0
- package/docs/components/slider.md +157 -0
- package/docs/components/steps.md +189 -0
- package/docs/components/sticky.md +76 -0
- package/docs/components/subsection.md +183 -0
- package/docs/components/swipeAction.md +279 -0
- package/docs/components/swiper.md +352 -0
- package/docs/components/switch.md +216 -0
- package/docs/components/tabbar.md +263 -0
- package/docs/components/table.md +5 -0
- package/docs/components/tabs.md +364 -0
- package/docs/components/tag.md +227 -0
- package/docs/components/testPic.md +20 -0
- package/docs/components/text.md +157 -0
- package/docs/components/textarea.md +121 -0
- package/docs/components/toast.md +124 -0
- package/docs/components/tooltip.md +98 -0
- package/docs/components/transition.md +404 -0
- package/docs/components/upload.md +253 -0
- package/docs/components/vtabs.md +332 -0
- package/docs/components/vueUse.md +45 -0
- package/docs/components/vuexDetail.md +103 -0
- package/docs/components/waterfall.md +651 -0
- package/docs/faq/index.md +53 -0
- package/docs/guide/codeHint.md +44 -0
- package/docs/guide/customIcon.md +168 -0
- package/docs/guide/demo.md +92 -0
- package/docs/guide/design.md +56 -0
- package/docs/guide/globalVariable.md +239 -0
- package/docs/guide/i18n.md +194 -0
- package/docs/guide/index.md +28 -0
- package/docs/guide/note.md +74 -0
- package/docs/guide/safeAreaInset.md +64 -0
- package/docs/guide/theme.md +67 -0
- package/docs/index.md +88 -0
- package/libs/config/config.js +0 -10
- package/libs/css/color.scss +15 -14
- package/package.json +7 -2
- package/theme.scss +2 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# 扩展配置
|
|
2
|
+
|
|
3
|
+
`@gmcb/uv-ui` 注册后会向 `uni.$uv` 注入工具、请求实例、路由方法和配置对象。本页说明插件注册、局部引用、主题样式和 `setConfig` 的推荐用法。
|
|
4
|
+
|
|
5
|
+
## 注册插件
|
|
6
|
+
|
|
7
|
+
在 uni-app 入口注册:
|
|
8
|
+
|
|
9
|
+
```ts
|
|
10
|
+
import { createSSRApp } from 'vue';
|
|
11
|
+
import uvUI from '@gmcb/uv-ui';
|
|
12
|
+
import App from './App.vue';
|
|
13
|
+
|
|
14
|
+
export function createApp() {
|
|
15
|
+
const app = createSSRApp(App);
|
|
16
|
+
app.use(uvUI);
|
|
17
|
+
return {
|
|
18
|
+
app,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
注册后可以使用:
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
uni.$uv.trim(' abc ');
|
|
27
|
+
uni.$uv.random(1, 3);
|
|
28
|
+
uni.$uv.route('/pages/index/index');
|
|
29
|
+
uni.$uv.http.get('/api/example');
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 组件实例能力
|
|
33
|
+
|
|
34
|
+
部分能力依赖组件实例上下文,例如 `getRect`。Vue 3 `<script setup>` 中可以通过 `getCurrentInstance()` 访问:
|
|
35
|
+
|
|
36
|
+
```vue
|
|
37
|
+
<script setup>
|
|
38
|
+
import { onReady } from '@dcloudio/uni-app';
|
|
39
|
+
import { getCurrentInstance } from 'vue';
|
|
40
|
+
|
|
41
|
+
const { proxy } = getCurrentInstance();
|
|
42
|
+
|
|
43
|
+
onReady(() => {
|
|
44
|
+
proxy.$uv.getRect('.demo').then((rect) => {
|
|
45
|
+
console.log(rect);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
</script>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
节点布局相关说明见 [getRect](/api/utils/getRect.md)。
|
|
53
|
+
|
|
54
|
+
## 局部引用
|
|
55
|
+
|
|
56
|
+
不需要全局注册时,也可以直接从包内工具路径按需引用:
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
import { os, sys, timeFormat } from '@gmcb/uv-ui/libs/function/index.js';
|
|
60
|
+
import { trim } from '@gmcb/uv-ui/libs/function/test.js';
|
|
61
|
+
import route from '@gmcb/uv-ui/libs/utils/route.js';
|
|
62
|
+
|
|
63
|
+
console.log(os());
|
|
64
|
+
console.log(sys());
|
|
65
|
+
console.log(trim(' abc '));
|
|
66
|
+
console.log(timeFormat(Date.now(), 'yyyy-mm-dd'));
|
|
67
|
+
route('/pages/index/index');
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
深度引用路径依赖包内发布结构,升级前应确认目标文件仍存在。
|
|
71
|
+
|
|
72
|
+
## 主题样式
|
|
73
|
+
|
|
74
|
+
在 `uni.scss` 或统一主题入口引入主题变量:
|
|
75
|
+
|
|
76
|
+
```scss
|
|
77
|
+
@import '@gmcb/uv-ui/theme.scss';
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
在 `App.vue` 或全局样式入口引入基础样式:
|
|
81
|
+
|
|
82
|
+
```scss
|
|
83
|
+
@import '@gmcb/uv-ui/index.scss';
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
基础样式包含常用工具类,例如 `uv-line-1`、`uv-border`、`uv-border-top`、`uv-hover-class`。
|
|
87
|
+
|
|
88
|
+
## setConfig
|
|
89
|
+
|
|
90
|
+
`setConfig` 用于修改 `uni.$uv.config` 和组件默认 props。需要在 `app.use(uvUI)` 之后执行:
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
import uvUI from '@gmcb/uv-ui';
|
|
94
|
+
|
|
95
|
+
app.use(uvUI);
|
|
96
|
+
|
|
97
|
+
uni.$uv.setConfig({
|
|
98
|
+
config: {
|
|
99
|
+
unit: 'rpx',
|
|
100
|
+
},
|
|
101
|
+
props: {
|
|
102
|
+
text: {
|
|
103
|
+
color: {
|
|
104
|
+
default: 'red',
|
|
105
|
+
},
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
注意:`app-vue` 不支持全局使用 `uni.$uv.setConfig` 设置 props 时,请在目标平台验证实际效果。
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
## 配置的原理
|
|
2
|
+
|
|
3
|
+
### 注册 JS 工具库
|
|
4
|
+
|
|
5
|
+
`@gmcb/uv-ui` 内部集成了常用 JS 工具,例如 `random`、`trim`、`queryParams`、`http` 等。Vue 3 项目需要在 `main.js` 中通过 `app.use(uvUI)` 注册:
|
|
6
|
+
|
|
7
|
+
```js
|
|
8
|
+
import App from './App';
|
|
9
|
+
import { createSSRApp } from 'vue';
|
|
10
|
+
import uvUI from '@gmcb/uv-ui';
|
|
11
|
+
|
|
12
|
+
export function createApp() {
|
|
13
|
+
const app = createSSRApp(App);
|
|
14
|
+
app.use(uvUI);
|
|
15
|
+
return { app };
|
|
16
|
+
}
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
注册后,普通模块可通过 `uni.$uv` 使用工具:
|
|
20
|
+
|
|
21
|
+
```js
|
|
22
|
+
console.log(uni.$uv.random(1, 10));
|
|
23
|
+
console.log(uni.$uv.trim(' abc '));
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
组件实例相关能力可在 `<script setup>` 中通过实例代理访问:
|
|
27
|
+
|
|
28
|
+
```vue
|
|
29
|
+
<script setup>
|
|
30
|
+
import { getCurrentInstance } from 'vue';
|
|
31
|
+
|
|
32
|
+
const { proxy } = getCurrentInstance();
|
|
33
|
+
proxy.$uv.toast('保存成功');
|
|
34
|
+
|
|
35
|
+
</script>
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 引入 SCSS 主题变量
|
|
39
|
+
|
|
40
|
+
主题变量应写入项目根目录的 `uni.scss`:
|
|
41
|
+
|
|
42
|
+
```scss
|
|
43
|
+
@import '@gmcb/uv-ui/theme.scss';
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### 引入基础样式
|
|
47
|
+
|
|
48
|
+
基础样式建议在 `App.vue` 中全局引入:
|
|
49
|
+
|
|
50
|
+
```vue
|
|
51
|
+
<style lang="scss">
|
|
52
|
+
@import '@gmcb/uv-ui/index.scss';
|
|
53
|
+
</style>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### easycom
|
|
57
|
+
|
|
58
|
+
easycom 可以让 `uv-*` 组件按需自动引入:
|
|
59
|
+
|
|
60
|
+
```json
|
|
61
|
+
{
|
|
62
|
+
"easycom": {
|
|
63
|
+
"^uv-(.*)": "@gmcb/uv-ui/components/uv-$1/uv-$1.vue"
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
```
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
## Skeleton 骨架屏 <to-api/>
|
|
2
|
+
|
|
3
|
+
<demo-model url="/pages/componentsD/skeleton/skeleton"></demo-model>
|
|
4
|
+
|
|
5
|
+
::: tip ✈
|
|
6
|
+
|
|
7
|
+
**组件名:uv-skeleton**
|
|
8
|
+
|
|
9
|
+
[点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uv-skeleton)
|
|
10
|
+
|
|
11
|
+
:::
|
|
12
|
+
|
|
13
|
+
骨架屏一般用于页面在请求远程数据尚未完成时,页面用灰色块预显示本来的页面结构,给用户更好的体验。
|
|
14
|
+
|
|
15
|
+
::: warning 说明
|
|
16
|
+
由于```VUE```和```NVUE```的特性不同,组件动画在```VUE```上为由左到右形式,在```NVUE```上为明暗显隐的形式。
|
|
17
|
+
:::
|
|
18
|
+
|
|
19
|
+
### 平台兼容性
|
|
20
|
+
|
|
21
|
+
|App(vue)|App(nvue)|H5|小程序|VUE2|VUE3|
|
|
22
|
+
|:-:|:-:|:-:|:-:|:-:|:-:|
|
|
23
|
+
|√|√|√|√|√|√|
|
|
24
|
+
|
|
25
|
+
### 基本使用
|
|
26
|
+
|
|
27
|
+
组件由`标题`,`段落`和`头像`组件组件,其中`段落`需要通过`rows`参数配置才显示,可以通过`title`和`avatar`是否显示`标题`和`头像` 。
|
|
28
|
+
该组件的使用,有几个需要注意的点,如下:
|
|
29
|
+
- `title`(可选),是否显示`标题`占位行,该占位行不布满全屏宽度,同时与`段落`的距离较大以做明显区分,默认为`true`
|
|
30
|
+
- `avatar`(可选),是否在左上角位置显示圆形的`头像`占位区域
|
|
31
|
+
- `rows`(可选),`段落`的行数
|
|
32
|
+
- `loading`(必选),是否加载中状态,如果为`true`则显示骨架屏组件占位,否则显示插槽中的内容
|
|
33
|
+
|
|
34
|
+
数据请求完成后,将`loading`设置为`false`,会隐藏骨架组件
|
|
35
|
+
|
|
36
|
+
```vue
|
|
37
|
+
<template>
|
|
38
|
+
<uv-skeleton rows="3" title loading></uv-skeleton>
|
|
39
|
+
</template>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 加载中动画
|
|
43
|
+
|
|
44
|
+
设置`animate`为`true`,加载中的骨架块将会有一个动画效果,用以加强视觉效果。
|
|
45
|
+
|
|
46
|
+
```vue
|
|
47
|
+
<uv-skeleton :loading="true" :animate="true"></uv-skeleton>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 显示头像
|
|
51
|
+
```vue
|
|
52
|
+
<uv-skeleton :loading="true" avatar rows="1"></uv-skeleton>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 插槽内容
|
|
56
|
+
|
|
57
|
+
可以通过插槽写入展示的内容,当请求结束,将```loading```设置为```false```,此时会隐藏骨架组件,同时展示插槽内容。
|
|
58
|
+
|
|
59
|
+
```vue
|
|
60
|
+
<template>
|
|
61
|
+
<uv-skeleton rows="2" :loading="loading" avatar :title="false">
|
|
62
|
+
<text>loading为false时,将会展示此处插槽内容</text>
|
|
63
|
+
</uv-skeleton>
|
|
64
|
+
</template>
|
|
65
|
+
<script setup>
|
|
66
|
+
import { ref } from 'vue';
|
|
67
|
+
import { onLoad } from '@dcloudio/uni-app';
|
|
68
|
+
|
|
69
|
+
const loading = ref(true);
|
|
70
|
+
onLoad(() => {
|
|
71
|
+
setTimeout(() => {
|
|
72
|
+
loading.value = false;
|
|
73
|
+
}, 2000);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
</script>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### 完整示例
|
|
80
|
+
|
|
81
|
+
::: tip 完整示例下载地址
|
|
82
|
+
|
|
83
|
+
[https://ext.dcloud.net.cn/plugin?name=uv-ui](https://ext.dcloud.net.cn/plugin?name=uv-ui)
|
|
84
|
+
|
|
85
|
+
:::
|
|
86
|
+
|
|
87
|
+
### API
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### Skeleton Props
|
|
91
|
+
|
|
92
|
+
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|
|
93
|
+
|:- |:- |:- |:- |:- |
|
|
94
|
+
| loading | 是否显示骨架占位图,设置为`false`将会展示子组件内容 | Boolean | true | true | false |
|
|
95
|
+
| animate | 是否开启动画效果 | Boolean | true | true | false |
|
|
96
|
+
| rows | 段落占位图行数 | Number | String | 0 | - |
|
|
97
|
+
| rowsWidth | 段落占位图的宽度,可以为百分比,数值,带单位字符串等,可通过数组传入指定每个段落行的宽度 | String | Array | Number | 100% | - |
|
|
98
|
+
| rowsHeight | 段落的高度 | String | Array | Number | 18 | - |
|
|
99
|
+
| title | 是否展示标题占位图 | Boolean | true | true | false |
|
|
100
|
+
| titleWidth | 标题的宽度 | String | Number | 50% | - |
|
|
101
|
+
| titleHeight | 标题的高度 | String | Number | 18 | - |
|
|
102
|
+
| avatar | 是否展示头像占位图 | Boolean | false | true | false |
|
|
103
|
+
| avatarSize | 头像占位图大小 | String | Number | 32 | - |
|
|
104
|
+
| avatarShape | 头像占位图的形状,circle-圆形,square-方形 | String | circle| circle | square |
|
|
105
|
+
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
## Skeletons 骨架屏(新版) <to-api/>
|
|
2
|
+
|
|
3
|
+
<demo-model url="/pages/componentsD/skeletons/skeletons"></demo-model>
|
|
4
|
+
|
|
5
|
+
::: tip ✈
|
|
6
|
+
|
|
7
|
+
**组件名:uv-skeletons**
|
|
8
|
+
|
|
9
|
+
[点击下载&安装](https://ext.dcloud.net.cn/plugin?name=uv-skeletons)
|
|
10
|
+
|
|
11
|
+
:::
|
|
12
|
+
|
|
13
|
+
骨架屏一般用于页面在请求远程数据尚未完成时,在内容加载出来前展示与内容布局结构一致的灰白块,提升用户视觉体验。
|
|
14
|
+
|
|
15
|
+
新版骨架屏与老版本使用参数有很大的区别,所以才有了新版本,无法替换老版本。
|
|
16
|
+
|
|
17
|
+
新版骨架屏比老版本骨架屏更加灵活,理论上简单的左右上下布局结构均可以轻松实现,样式自由度较高,只要你会写css,推荐使用新版。
|
|
18
|
+
|
|
19
|
+
### 平台兼容性
|
|
20
|
+
|
|
21
|
+
|App(vue)|App(nvue)|H5|小程序|VUE2|VUE3|
|
|
22
|
+
|:-:|:-:|:-:|:-:|:-:|:-:|
|
|
23
|
+
|√|√|√|√|√|√|
|
|
24
|
+
|
|
25
|
+
:::warning 注意事项
|
|
26
|
+
|
|
27
|
+
> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。
|
|
28
|
+
1. 由于`vue`和`nvue`的特性不同,组件动画在`vue`上为由左到右变化形式,在`nvue`上为明暗显隐的形式。
|
|
29
|
+
|
|
30
|
+
:::
|
|
31
|
+
|
|
32
|
+
### 基本使用
|
|
33
|
+
|
|
34
|
+
该组件主要由 `loading` 和 `skeleton` 两个参数控制,骨架屏的具体内容由 `skeleton` 中的参数决定,这点非常重要,理论上只需要按照约定配置好该参数,就可以实现想要的结构,如下:
|
|
35
|
+
|
|
36
|
+
- `loading`(必选),是否加载中状态,如果为`true`则显示骨架屏组件占位,否则显示插槽中的内容
|
|
37
|
+
- `skeleton`,数组形式 [Object,Object,...]。
|
|
38
|
+
- Object.type 类型,type的类型有多种见下方[参数说明](/components/skeletons.html#skeletons-options)。实际上type的意义不大,除flex类型外(下面会是单独说明该用法),其他的类型都可以自定义任意样式,默认为line。
|
|
39
|
+
- Object.num 表示重复几个,默认为1。
|
|
40
|
+
- Object.gap 重复几个之间的垂直间隔,**只有Object.num大于1才会生效**,默认 `20rpx`。
|
|
41
|
+
|
|
42
|
+
```vue
|
|
43
|
+
<template>
|
|
44
|
+
<view>
|
|
45
|
+
<uv-skeletons :loading="loading" :skeleton="skeleton"></uv-skeletons>
|
|
46
|
+
</view>
|
|
47
|
+
</template>
|
|
48
|
+
<script setup>
|
|
49
|
+
import { ref } from "vue";
|
|
50
|
+
const loading = ref(true);
|
|
51
|
+
const skeleton = ref([{
|
|
52
|
+
type: 'line',
|
|
53
|
+
num: 3,
|
|
54
|
+
gap: '20rpx'
|
|
55
|
+
}]);
|
|
56
|
+
|
|
57
|
+
</script>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 自定义样式
|
|
61
|
+
|
|
62
|
+
- 通过 `skeleton` 中的 `style` 参数,可以自定义样式。
|
|
63
|
+
- `style` 的类型可以是 array | string | object,示例中的代码都有体现,仅为演示示例,样式根据需求自定义。
|
|
64
|
+
- `style` 的array类型,例如:['height: 100rpx;',null,null],代表第一个line高度为100rpx,其余的line使用默认样式。
|
|
65
|
+
- `style` 的string和object类型,实际上是一样的,都是设置3个line均使用设置的样式。
|
|
66
|
+
|
|
67
|
+
```vue
|
|
68
|
+
<template>
|
|
69
|
+
<view>
|
|
70
|
+
<uv-skeletons :loading="loading" :skeleton="skeleton"></uv-skeletons>
|
|
71
|
+
</view>
|
|
72
|
+
</template>
|
|
73
|
+
<script setup>
|
|
74
|
+
import { ref } from "vue";
|
|
75
|
+
const loading = ref(true);
|
|
76
|
+
const skeleton = ref([{
|
|
77
|
+
type: 'line',
|
|
78
|
+
num: 3,
|
|
79
|
+
gap: '20rpx',
|
|
80
|
+
style: ['width: 200rpx;marginBottom: 50rpx;', 'height: 100rpx;', 'width: 500rpx;']
|
|
81
|
+
// style: 'width: 200rpx;marginBottom: 50rpx;'
|
|
82
|
+
// style: {width: '200rpx',marginBottom: '50rpx'}
|
|
83
|
+
}]);
|
|
84
|
+
|
|
85
|
+
</script>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 横向并列布局
|
|
89
|
+
|
|
90
|
+
- 通过 `skeleton` 中的参数 `type` 为 `flex`,可以实现横向并列布局。
|
|
91
|
+
- Object.children 该参数的用法与上述一致。**注意:children下不支持再有children**
|
|
92
|
+
- `type` 还有 avatar、custom 类型,下面示例可以看出。
|
|
93
|
+
- avatar类型,为了好理解,增加了头像类型,有自己的默认样式,实际上也可使使用style进行样式控制。
|
|
94
|
+
- custom类型,完全自定义样式的可以使用该类型,这样做的目的仅仅是为了好理解。
|
|
95
|
+
|
|
96
|
+
```vue
|
|
97
|
+
<template>
|
|
98
|
+
<view>
|
|
99
|
+
<uv-skeletons :loading="loading" :skeleton="skeleton"></uv-skeletons>
|
|
100
|
+
</view>
|
|
101
|
+
</template>
|
|
102
|
+
<script setup>
|
|
103
|
+
import { ref } from "vue";
|
|
104
|
+
const loading = ref(true);
|
|
105
|
+
const skeleton = ref([{
|
|
106
|
+
type: 'flex',
|
|
107
|
+
num: 1,
|
|
108
|
+
children: [{
|
|
109
|
+
type: 'avatar',
|
|
110
|
+
num: 1,
|
|
111
|
+
style: 'marginRight: 10rpx;'
|
|
112
|
+
}, {
|
|
113
|
+
type: 'line',
|
|
114
|
+
num: 3,
|
|
115
|
+
gap: '30rpx',
|
|
116
|
+
style: ['width: 200rpx;', null, 'width:400rpx;']
|
|
117
|
+
}, {
|
|
118
|
+
type: 'custom',
|
|
119
|
+
num: 1,
|
|
120
|
+
style: 'width: 200rpx;height:200rpx;marginLeft: 10rpx;'
|
|
121
|
+
}]
|
|
122
|
+
}]);
|
|
123
|
+
|
|
124
|
+
</script>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 混合布局 + 插槽内容
|
|
128
|
+
|
|
129
|
+
- 可以通过插槽写入展示的内容,当请求结束,将```loading```设置为```false```,此时会隐藏骨架组件,同时展示插槽内容。
|
|
130
|
+
- `skeleton` 参数还可以是一个 `Number`,表示上下之间的间距,单位为 `rpx`。30 代表上下之间的间距为 `30rpx`,示例如下:
|
|
131
|
+
|
|
132
|
+
```vue
|
|
133
|
+
<template>
|
|
134
|
+
<view class="uv-page">
|
|
135
|
+
<uv-skeletons :loading="loading" :skeleton="skeleton" :animate="animate">
|
|
136
|
+
<view class="uv-skeletons__row uv-skeletons__row1">
|
|
137
|
+
<view class="uv-skeletons__row1--left">
|
|
138
|
+
<image class="img" src="https://via.placeholder.com/200x200.png/3c9cff"></image>
|
|
139
|
+
</view>
|
|
140
|
+
<view class="uv-skeletons__row1--right">
|
|
141
|
+
<uv-text text="uv-ui破釜沉舟之兼容vue3+2、nvue、app、h5" color="#222" size="30rpx" lines="1"></uv-text>
|
|
142
|
+
<uv-text text="在经过改进后全面支持vue3" color="#222" size="30rpx" lines="1" margin="6rpx 0 0"></uv-text>
|
|
143
|
+
<uv-text text="欢迎大家使用" lines="1" color="#222" size="30rpx" margin="6rpx 0 0"></uv-text>
|
|
144
|
+
</view>
|
|
145
|
+
</view>
|
|
146
|
+
<view style="height: 30rpx;"></view>
|
|
147
|
+
<view class="uv-skeletons__row uv-skeletons__row2">
|
|
148
|
+
<image class="img" src="https://via.placeholder.com/200x200.png/3c9cff"></image>
|
|
149
|
+
<image class="img" src="https://via.placeholder.com/200x200.png/f9ae3d"></image>
|
|
150
|
+
<image class="img" src="https://via.placeholder.com/200x200.png/5ac725"></image>
|
|
151
|
+
<image class="img" src="https://via.placeholder.com/200x200.png/f56c6c"></image>
|
|
152
|
+
<image class="img" src="https://via.placeholder.com/200x200.png/909399"></image>
|
|
153
|
+
</view>
|
|
154
|
+
<view style="height: 30rpx;"></view>
|
|
155
|
+
<view class="uv-skeletons__row uv-skeletons__row3">
|
|
156
|
+
<view class="uv-skeletons__row3--left">
|
|
157
|
+
<uv-text text="uv-ui破釜沉舟之兼容vue3+2、nvue、app、h5、多端小程序的uni-app生态框架" color="#222" size="30rpx" bold lines="1"></uv-text>
|
|
158
|
+
<uv-text text="大部分组件基于uView2.x,在经过改进后全面支持vue3,部分组件做了进一步的优化,支持单独导入,方便开发者选择导入需要的组件。" lines="1" color="#222" size="30rpx" margin="8rpx 0 0"></uv-text>
|
|
159
|
+
<uv-text text="uv-ui来源于社区,也回归到社区,正是有一群热爱uni-app生态的同学推着它前行,而我们也一如既往的承诺,uv-ui永久开源,永远免费。我们会在部分组件下载时配置广告抵消一部分成本,希望大家理解。" lines="1" color="#222" size="30rpx" margin="8rpx 0 0"></uv-text>
|
|
160
|
+
</view>
|
|
161
|
+
<view class="uv-skeletons__row3--right">
|
|
162
|
+
<image class="img" src="https://via.placeholder.com/200x200.png/3c9cff"></image>
|
|
163
|
+
</view>
|
|
164
|
+
</view>
|
|
165
|
+
</uv-skeletons>
|
|
166
|
+
</view>
|
|
167
|
+
</template>
|
|
168
|
+
<script setup>
|
|
169
|
+
import { ref } from "vue";
|
|
170
|
+
const loading = ref(true);
|
|
171
|
+
const animate = ref(true);
|
|
172
|
+
const skeleton = ref([{
|
|
173
|
+
type: 'flex',
|
|
174
|
+
num: 1,
|
|
175
|
+
children: [{
|
|
176
|
+
type: 'custom',
|
|
177
|
+
num: 1,
|
|
178
|
+
style: 'width:136rpx;height:136rpx;marginRight: 30rpx;'
|
|
179
|
+
}, {
|
|
180
|
+
type: 'line',
|
|
181
|
+
num: 3,
|
|
182
|
+
style: [null, 'width:360rpx;', 'width:200rpx;']
|
|
183
|
+
}]
|
|
184
|
+
}, 30, {
|
|
185
|
+
type: 'flex',
|
|
186
|
+
children: [{
|
|
187
|
+
type: 'custom',
|
|
188
|
+
style: 'width:98rpx;height:160rpx;'
|
|
189
|
+
}, {
|
|
190
|
+
type: 'custom',
|
|
191
|
+
style: 'width:98rpx;height:160rpx;marginLeft:50rpx;'
|
|
192
|
+
}, {
|
|
193
|
+
type: 'custom',
|
|
194
|
+
style: 'width:98rpx;height:160rpx;marginLeft:50rpx;'
|
|
195
|
+
}, {
|
|
196
|
+
type: 'custom',
|
|
197
|
+
style: 'width:98rpx;height:160rpx;marginLeft:50rpx;'
|
|
198
|
+
}, {
|
|
199
|
+
type: 'custom',
|
|
200
|
+
style: 'width:98rpx;height:160rpx;marginLeft:50rpx;'
|
|
201
|
+
}]
|
|
202
|
+
}, 30, {
|
|
203
|
+
type: 'flex',
|
|
204
|
+
children: [{
|
|
205
|
+
type: 'line',
|
|
206
|
+
num: 3,
|
|
207
|
+
gap: '30rpx'
|
|
208
|
+
}, {
|
|
209
|
+
type: 'custom',
|
|
210
|
+
style: 'width:160rpx;height:160rpx;marginLeft: 30rpx;'
|
|
211
|
+
}]
|
|
212
|
+
}]);
|
|
213
|
+
|
|
214
|
+
</script>
|
|
215
|
+
<style lang="scss" scoped>
|
|
216
|
+
.uv-page {
|
|
217
|
+
padding: 15px 30rpx 40px;
|
|
218
|
+
}
|
|
219
|
+
.uv-skeletons__row {
|
|
220
|
+
/* #ifndef APP-NVUE */
|
|
221
|
+
display: flex;
|
|
222
|
+
/* #endif */
|
|
223
|
+
flex-direction: row;
|
|
224
|
+
}
|
|
225
|
+
.uv-skeletons__row1 {
|
|
226
|
+
&--left {
|
|
227
|
+
width: 136rpx;
|
|
228
|
+
height: 136rpx;
|
|
229
|
+
margin-right: 30rpx;
|
|
230
|
+
.img {
|
|
231
|
+
width: 136rpx;
|
|
232
|
+
height: 136rpx;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
&--right {
|
|
236
|
+
flex: 1;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
.uv-skeletons__row2 {
|
|
240
|
+
justify-content: space-between;
|
|
241
|
+
.img {
|
|
242
|
+
width: 98rpx;
|
|
243
|
+
height: 160rpx;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
.uv-skeletons__row3 {
|
|
247
|
+
&--left {
|
|
248
|
+
flex: 1;
|
|
249
|
+
}
|
|
250
|
+
&--right {
|
|
251
|
+
.img {
|
|
252
|
+
width: 160rpx;
|
|
253
|
+
height: 160rpx;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
</style>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### 完整示例
|
|
261
|
+
|
|
262
|
+
::: tip 完整示例下载地址
|
|
263
|
+
|
|
264
|
+
[https://ext.dcloud.net.cn/plugin?name=uv-ui](https://ext.dcloud.net.cn/plugin?name=uv-ui)
|
|
265
|
+
|
|
266
|
+
:::
|
|
267
|
+
|
|
268
|
+
### API
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
### Skeletons Props
|
|
272
|
+
|
|
273
|
+
| 参数 | 类型 | 默认值 | 说明 |
|
|
274
|
+
|:-|:-|:-|:-|
|
|
275
|
+
| loading | Boolean | true | 是否显示骨架 |
|
|
276
|
+
| animate | Boolean | true | 是否开启动画效果 |
|
|
277
|
+
| skeleton | Array | [] | 骨架内容,具体用法请看下方[Skeleton Options](/components/skeletons.html#skeletons-options)参数说明 |
|
|
278
|
+
|
|
279
|
+
#### Skeletons Options
|
|
280
|
+
|
|
281
|
+
该参数非常重要,该配置决定能不能正常显示骨架内容。该参数的格式为:[Object,Number],Number值代表垂直间隔距离
|
|
282
|
+
|
|
283
|
+
| 属性名 | 说明 |
|
|
284
|
+
|:-|:-|
|
|
285
|
+
| Object.type | 骨架类型,组件内置了四种:line - 段落结构;avatar - 头像形状;flex - 并列,需要有children属性;custom - 自定义类型,理论上和line、avatar没区别,其实都可以完全自定义样式 |
|
|
286
|
+
| Object.num | 重复数量,`[{type:'line',num:3}]`意思是3个段落结构骨架 |
|
|
287
|
+
| Object.gap | 骨架下边距,`[{type:'line',num:3,gap: '30rpx'}]`意思是3个段落结构骨架的下边距均为`30rpx`。**注意:只有Object.num大于1才会生效** |
|
|
288
|
+
| Object.style | 骨架样式,类型是Array/Object/String,Array依次对应重复骨架的样式,数组中也可使用Object/String;Object和String代表重复的骨架均用该样式。具体使用参考上述案例 |
|
|
289
|
+
| Number | 表示数组上一项和下一项的间隔距离,单位 `rpx`。上述示例有所体现:[混合布局-插槽内容](/components/skeletons.html#混合布局-插槽内容) |
|
|
290
|
+
|
|
291
|
+
:::warning 注意
|
|
292
|
+
示例依赖了 `uv-ui` `uv-text` 等多个组件,直接拷贝示例代码将无法正常运行。
|
|
293
|
+
请到 [组件下载页面](https://ext.dcloud.net.cn/plugin?name=uv-skeletons) ,在页面右侧选择 使用 `HBuilderX导入示例项目` 。
|
|
294
|
+
:::
|
|
295
|
+
|
|
296
|
+
<style scoped>
|
|
297
|
+
h3[id=skeletons-props] + table thead tr th:nth-child(1),
|
|
298
|
+
h3[id=skeletons-props] + table thead tr th:nth-child(2),
|
|
299
|
+
h3[id=skeletons-props] + table thead tr th:nth-child(3)
|
|
300
|
+
{
|
|
301
|
+
width: 18%;
|
|
302
|
+
}
|
|
303
|
+
h3[id=skeletons-methods] + table thead tr th:nth-child(2)
|
|
304
|
+
{
|
|
305
|
+
width: 70%;
|
|
306
|
+
}
|
|
307
|
+
h3[id=skeletons-events] + table thead tr th:nth-child(2),
|
|
308
|
+
h3[id=skeletons-events] + table thead tr th:nth-child(3)
|
|
309
|
+
{
|
|
310
|
+
width: 40%;
|
|
311
|
+
}
|
|
312
|
+
h4[id=skeletons-options] + p + table {
|
|
313
|
+
width: 80%;
|
|
314
|
+
}
|
|
315
|
+
h4[id=skeletons-options] + p + table thead tr th:nth-child(1)
|
|
316
|
+
{
|
|
317
|
+
width: 20%;
|
|
318
|
+
}
|
|
319
|
+
h4[id=skeletons-options] + p + table thead tr th:nth-child(2)
|
|
320
|
+
{
|
|
321
|
+
width: 80%;
|
|
322
|
+
}
|
|
323
|
+
</style>
|