@fredwsw/frontend-rules 1.0.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.
Files changed (81) hide show
  1. package/README.md +302 -0
  2. package/bin/cli.js +155 -0
  3. package/package.json +22 -0
  4. package/template/docs/uv-ui-docs/action-sheet-cn.md +180 -0
  5. package/template/docs/uv-ui-docs/album-cn.md +104 -0
  6. package/template/docs/uv-ui-docs/alert-cn.md +71 -0
  7. package/template/docs/uv-ui-docs/avatar-cn.md +149 -0
  8. package/template/docs/uv-ui-docs/back-top-cn.md +121 -0
  9. package/template/docs/uv-ui-docs/badge-cn.md +100 -0
  10. package/template/docs/uv-ui-docs/button-cn.md +181 -0
  11. package/template/docs/uv-ui-docs/calendar-cn.md +179 -0
  12. package/template/docs/uv-ui-docs/calendars-cn.md +264 -0
  13. package/template/docs/uv-ui-docs/cell-cn.md +163 -0
  14. package/template/docs/uv-ui-docs/checkbox-cn.md +164 -0
  15. package/template/docs/uv-ui-docs/code-cn.md +122 -0
  16. package/template/docs/uv-ui-docs/code-input-cn.md +127 -0
  17. package/template/docs/uv-ui-docs/collapse-cn.md +206 -0
  18. package/template/docs/uv-ui-docs/color-cn.md +122 -0
  19. package/template/docs/uv-ui-docs/count-down-cn.md +169 -0
  20. package/template/docs/uv-ui-docs/count-to-cn.md +125 -0
  21. package/template/docs/uv-ui-docs/datetime-picker-cn.md +167 -0
  22. package/template/docs/uv-ui-docs/divider-cn.md +90 -0
  23. package/template/docs/uv-ui-docs/drop-down-cn.md +287 -0
  24. package/template/docs/uv-ui-docs/empty-cn.md +76 -0
  25. package/template/docs/uv-ui-docs/form-cn.md +220 -0
  26. package/template/docs/uv-ui-docs/gap-cn.md +63 -0
  27. package/template/docs/uv-ui-docs/grid-cn.md +187 -0
  28. package/template/docs/uv-ui-docs/icon-cn.md +255 -0
  29. package/template/docs/uv-ui-docs/image-cn.md +170 -0
  30. package/template/docs/uv-ui-docs/index-list-cn.md +132 -0
  31. package/template/docs/uv-ui-docs/input-cn.md +157 -0
  32. package/template/docs/uv-ui-docs/keyboard-cn.md +156 -0
  33. package/template/docs/uv-ui-docs/layout-cn.md +215 -0
  34. package/template/docs/uv-ui-docs/line-cn.md +77 -0
  35. package/template/docs/uv-ui-docs/line-progress-cn.md +132 -0
  36. package/template/docs/uv-ui-docs/link-cn.md +97 -0
  37. package/template/docs/uv-ui-docs/list-cn.md +185 -0
  38. package/template/docs/uv-ui-docs/load-more-cn.md +144 -0
  39. package/template/docs/uv-ui-docs/loading-icon-cn.md +125 -0
  40. package/template/docs/uv-ui-docs/loading-page-cn.md +85 -0
  41. package/template/docs/uv-ui-docs/modal-cn.md +212 -0
  42. package/template/docs/uv-ui-docs/navbar-cn.md +171 -0
  43. package/template/docs/uv-ui-docs/no-network-cn.md +112 -0
  44. package/template/docs/uv-ui-docs/notice-bar-cn.md +119 -0
  45. package/template/docs/uv-ui-docs/notify-cn.md +185 -0
  46. package/template/docs/uv-ui-docs/number-box-cn.md +131 -0
  47. package/template/docs/uv-ui-docs/overlay-cn.md +122 -0
  48. package/template/docs/uv-ui-docs/parse-cn.md +177 -0
  49. package/template/docs/uv-ui-docs/pick-color-cn.md +147 -0
  50. package/template/docs/uv-ui-docs/picker-cn.md +159 -0
  51. package/template/docs/uv-ui-docs/popup-cn.md +184 -0
  52. package/template/docs/uv-ui-docs/qrcode-cn.md +150 -0
  53. package/template/docs/uv-ui-docs/radio-cn.md +166 -0
  54. package/template/docs/uv-ui-docs/rate-cn.md +91 -0
  55. package/template/docs/uv-ui-docs/read-more-cn.md +191 -0
  56. package/template/docs/uv-ui-docs/scroll-list-cn.md +188 -0
  57. package/template/docs/uv-ui-docs/search-cn.md +107 -0
  58. package/template/docs/uv-ui-docs/skeleton-cn.md +101 -0
  59. package/template/docs/uv-ui-docs/skeletons-cn.md +312 -0
  60. package/template/docs/uv-ui-docs/slider-cn.md +98 -0
  61. package/template/docs/uv-ui-docs/steps-cn.md +158 -0
  62. package/template/docs/uv-ui-docs/sticky-cn.md +82 -0
  63. package/template/docs/uv-ui-docs/subsection-cn.md +161 -0
  64. package/template/docs/uv-ui-docs/swipe-action-cn.md +207 -0
  65. package/template/docs/uv-ui-docs/swiper-cn.md +247 -0
  66. package/template/docs/uv-ui-docs/switch-cn.md +136 -0
  67. package/template/docs/uv-ui-docs/tabbar-cn.md +224 -0
  68. package/template/docs/uv-ui-docs/tabs-cn.md +260 -0
  69. package/template/docs/uv-ui-docs/tags-cn.md +191 -0
  70. package/template/docs/uv-ui-docs/text-cn.md +178 -0
  71. package/template/docs/uv-ui-docs/textarea-cn.md +132 -0
  72. package/template/docs/uv-ui-docs/toast-cn.md +110 -0
  73. package/template/docs/uv-ui-docs/tooltip-cn.md +91 -0
  74. package/template/docs/uv-ui-docs/transition-cn.md +202 -0
  75. package/template/docs/uv-ui-docs/upload-cn.md +156 -0
  76. package/template/docs/uv-ui-docs/vtabs-cn.md +190 -0
  77. package/template/docs/uv-ui-docs/waterfall-cn.md +276 -0
  78. package/template/rules/common.mdc +90 -0
  79. package/template/rules/uv-ui-docs.mdc +111 -0
  80. package/template/skills/code-simplifier/SKILL.md +109 -0
  81. package/template/skills/frontend-design/SKILL.md +44 -0
@@ -0,0 +1,166 @@
1
+ ---
2
+ group: 表单
3
+ category: Components
4
+ title: Radio
5
+ subtitle: 单选框
6
+ description: 用于单选的场景,用户只能选择其中一个。
7
+ demo:
8
+ cols: 2
9
+ ---
10
+
11
+ ## 何时使用 {#when-to-use}
12
+
13
+ `uv-radio` 需配合 `uv-radio-group` 使用。通过 `v-model` 绑定当前选中项的 `name`。
14
+
15
+ > 完整示例下载地址:[uv-ui 插件市场](https://ext.dcloud.net.cn/plugin?name=uv-ui)
16
+
17
+ ## 平台兼容性 {#platform}
18
+
19
+ | App(vue) | App(nvue) | H5 | 小程序 | VUE2 | VUE3 |
20
+ | --- | --- | --- | --- | --- | --- |
21
+ | √ | √ | √ | √ | √ | √ |
22
+
23
+ **组件名:** `uv-radio-group` > `uv-radio`
24
+
25
+ ## 代码演示 {#examples}
26
+
27
+ ### 基本使用 {#basic}
28
+
29
+ ```vue
30
+ <template>
31
+ <uv-radio-group v-model="radiovalue">
32
+ <uv-radio
33
+ v-for="(item, index) in radiolist"
34
+ :key="index"
35
+ :label="item.name"
36
+ :name="item.name"
37
+ :custom-style="{ margin: '8px' }"
38
+ ></uv-radio>
39
+ </uv-radio-group>
40
+ </template>
41
+ <script>
42
+ export default {
43
+ data() {
44
+ return {
45
+ radiolist: [
46
+ { name: '苹果', disabled: false },
47
+ { name: '香蕉', disabled: false },
48
+ { name: '橙子', disabled: false },
49
+ { name: '榴莲', disabled: false }
50
+ ],
51
+ radiovalue: '苹果'
52
+ }
53
+ }
54
+ }
55
+ </script>
56
+ ```
57
+
58
+ ### 自定义形状 {#shape}
59
+
60
+ ```vue
61
+ <uv-radio-group v-model="radiovalue">
62
+ <uv-radio
63
+ shape="square"
64
+ v-for="(item, index) in radiolist"
65
+ :key="index"
66
+ :label="item.name"
67
+ :name="item.name"
68
+ ></uv-radio>
69
+ </uv-radio-group>
70
+ ```
71
+
72
+ ### 禁用 {#disabled}
73
+
74
+ ```vue
75
+ <uv-radio-group v-model="radiovalue">
76
+ <uv-radio disabled name="苹果" label="苹果"></uv-radio>
77
+ <uv-radio disabled name="梨子" label="梨子"></uv-radio>
78
+ <uv-radio name="香蕉" label="香蕉"></uv-radio>
79
+ </uv-radio-group>
80
+ ```
81
+
82
+ ### 自定义颜色 {#active-color}
83
+
84
+ ```vue
85
+ <uv-radio-group v-model="radiovalue">
86
+ <uv-radio name="苹果" label="苹果"></uv-radio>
87
+ <uv-radio name="香蕉" activeColor="red" label="香蕉"></uv-radio>
88
+ </uv-radio-group>
89
+ ```
90
+
91
+ ### 纵向排列 {#placement}
92
+
93
+ ```vue
94
+ <uv-radio-group v-model="radiovalue" placement="column">
95
+ <uv-radio name="苹果" label="苹果"></uv-radio>
96
+ <uv-radio name="香蕉" activeColor="red" label="香蕉"></uv-radio>
97
+ </uv-radio-group>
98
+ ```
99
+
100
+ ### 图标右对齐 {#icon-placement}
101
+
102
+ ```vue
103
+ <uv-radio-group v-model="radiovalue" placement="column" iconPlacement="right">
104
+ <uv-radio name="苹果" label="苹果"></uv-radio>
105
+ <uv-radio name="香蕉" label="香蕉"></uv-radio>
106
+ </uv-radio-group>
107
+ ```
108
+
109
+ ## API {#api}
110
+
111
+ ### RadioGroup Props {#group-props}
112
+
113
+ | 参数 | 说明 | 类型 | 默认值 | 可选值 |
114
+ | --- | --- | --- | --- | --- |
115
+ | value / v-model | 选中的 name | String \| Number \| Boolean | - | - |
116
+ | disabled | 是否禁用全部 | Boolean | false | true \| false |
117
+ | shape | 形状 | String | circle | circle \| square |
118
+ | activeColor | 选中颜色 | String | #2979ff | - |
119
+ | inactiveColor | 未选颜色 | String | #c8c9cc | - |
120
+ | size | 尺寸 | String \| Number | 18 | - |
121
+ | placement | 布局 | String | row | row \| column |
122
+ | labelColor | label 颜色 | String | #303133 | - |
123
+ | labelSize | label 字体大小 | String \| Number | 14 | - |
124
+ | labelDisabled | 是否禁止点击文本 | Boolean | false | true \| false |
125
+ | iconPlacement | 图标对齐 | String | left | left \| right |
126
+ | borderBottom | 纵向时是否显示下划线 | Boolean | false | true \| false |
127
+ | customStyle | 自定义样式 | Object | - | - |
128
+
129
+ ### Radio Props {#props}
130
+
131
+ radio 同名参数优先级高于 radio-group。
132
+
133
+ | 参数 | 说明 | 类型 | 默认值 | 可选值 |
134
+ | --- | --- | --- | --- | --- |
135
+ | name | 名称 | String \| Number \| Boolean | - | - |
136
+ | shape | 形状 | String | circle | circle \| square |
137
+ | disabled | 是否禁用 | Boolean | - | - |
138
+ | labelDisabled | 是否禁止点击文字 | String \| Boolean | - | - |
139
+ | activeColor | 选中颜色 | String | - | - |
140
+ | inactiveColor | 未选颜色 | String | - | - |
141
+ | iconSize | 图标大小 | String \| Number | - | - |
142
+ | labelSize | label 字体大小 | String \| Number | - | - |
143
+ | label | 提示文字 | String \| Number | - | - |
144
+ | size | 整体大小 | String \| Number | - | - |
145
+ | iconColor | 图标颜色 | String | - | - |
146
+ | labelColor | label 颜色 | String | - | - |
147
+ | customStyle | 自定义样式 | Object \| String | - | - |
148
+
149
+ ### Radio Slots {#slots}
150
+
151
+ | 名称 | 说明 |
152
+ | --- | --- |
153
+ | default | 自定义 label,自定义后 labelDisabled 失效 |
154
+ | icon | 自定义选中图标 |
155
+
156
+ ### RadioGroup Events {#group-events}
157
+
158
+ | 事件名 | 说明 | 回调参数 |
159
+ | --- | --- | --- |
160
+ | @change | 任意 radio 变化时 | name |
161
+
162
+ ### Radio Events {#events}
163
+
164
+ | 事件名 | 说明 | 回调参数 |
165
+ | --- | --- | --- |
166
+ | @change | 该 radio 选中时 | name |
@@ -0,0 +1,91 @@
1
+ ---
2
+ group: 表单
3
+ category: Components
4
+ title: Rate
5
+ subtitle: 评分
6
+ description: 用于星级打分评价,如商品评价等。
7
+ demo:
8
+ cols: 2
9
+ ---
10
+
11
+ ## 何时使用 {#when-to-use}
12
+
13
+ `uv-rate` 通过 `count` 设置星星数量,`v-model` 绑定选中的数量。
14
+
15
+ > 完整示例下载地址:[uv-ui 插件市场](https://ext.dcloud.net.cn/plugin?name=uv-ui)
16
+
17
+ ## 平台兼容性 {#platform}
18
+
19
+ | App(vue) | App(nvue) | H5 | 小程序 | VUE2 | VUE3 |
20
+ | --- | --- | --- | --- | --- | --- |
21
+ | √ | √ | √ | √ | √ | √ |
22
+
23
+ **组件名:** `uv-rate`
24
+
25
+ ## 代码演示 {#examples}
26
+
27
+ ### 基本使用 {#basic}
28
+
29
+ ```vue
30
+ <template>
31
+ <uv-rate :count="count" v-model="value"></uv-rate>
32
+ </template>
33
+ <script>
34
+ export default {
35
+ data() {
36
+ return { count: 4, value: 2 }
37
+ }
38
+ }
39
+ </script>
40
+ ```
41
+
42
+ ### 自定义样式 {#custom}
43
+
44
+ ```vue
45
+ <uv-rate active-color="#FA3534" inactive-color="#b2b2b2" gutter="20"></uv-rate>
46
+ ```
47
+
48
+ ### 自定义图标 {#icon}
49
+
50
+ ```vue
51
+ <uv-rate activeIcon="heart-fill" inactiveIcon="heart"></uv-rate>
52
+ ```
53
+
54
+ ### 最少选中 {#min-count}
55
+
56
+ ```vue
57
+ <uv-rate :minCount="5"></uv-rate>
58
+ ```
59
+
60
+ ### 禁用/只读 {#disabled-readonly}
61
+
62
+ ```vue
63
+ <uv-rate :value="3.7" disabled></uv-rate>
64
+ <uv-rate :value="3.7" readonly></uv-rate>
65
+ ```
66
+
67
+ ## API {#api}
68
+
69
+ ### Rate Props {#props}
70
+
71
+ | 参数 | 说明 | 类型 | 默认值 |
72
+ | --- | --- | --- | --- |
73
+ | value / v-model | 选中星星数量 | String \| Number | 1 |
74
+ | count | 星星总数 | String \| Number | 5 |
75
+ | disabled | 禁止操作 | Boolean | false |
76
+ | readonly | 只读 | Boolean | false |
77
+ | size | 星星大小 rpx | String \| Number | 18 |
78
+ | inactiveColor | 未选颜色 | String | #b2b2b2 |
79
+ | activeColor | 选中颜色 | String | #FA3534 |
80
+ | gutter | 间距 | String \| Number | 4 |
81
+ | minCount | 最少选中数 | String \| Number | 1 |
82
+ | allowHalf | 半星(仅 vue) | Boolean | false |
83
+ | activeIcon | 选中图标 | String | star-fill |
84
+ | inactiveIcon | 未选图标 | String | star |
85
+ | touchable | 是否可滑动 | Boolean | true |
86
+
87
+ ### Rate Events {#events}
88
+
89
+ | 事件名 | 说明 | 回调参数 |
90
+ | --- | --- | --- |
91
+ | @change | 选中变化 | value |
@@ -0,0 +1,191 @@
1
+ ---
2
+ group: 数据
3
+ category: Components
4
+ title: ReadMore
5
+ subtitle: 展开阅读更多
6
+ description: 对长内容进行折叠展示,可在指定高度处截断,并通过“展开/收起”按钮控制全文显示。
7
+ demo:
8
+ cols: 2
9
+ ---
10
+
11
+ ## 何时使用 {#when-to-use}
12
+
13
+ `uv-read-more` 用于 **内容较长、默认只展示部分内容** 的场景,例如:
14
+
15
+ - 文章简介、长段落文案
16
+ - 商品详情中的前几行预览
17
+ - 配合富文本解析器 `uv-parse` 显示长文章
18
+
19
+ - 超出指定高度时自动出现「展开阅读全文」按钮
20
+ - 支持展开后是否显示收起按钮
21
+ - 支持异步内容与手动初始化高度
22
+ - 支持自定义顶部渐隐阴影样式
23
+
24
+ > 在部分微信小程序平台上,解析 `uv-parse` 内容较耗时,需在解析完成的回调中通过 `ref.init()` 重新初始化高度。
25
+ > 完整示例下载地址:[uv-ui 插件市场](https://ext.dcloud.net.cn/plugin?name=uv-ui)
26
+
27
+ ## 平台兼容性 {#platform}
28
+
29
+ | App(vue) | App(nvue) | H5 | 小程序 | VUE2 | VUE3 |
30
+ | --- | --- | --- | --- | --- | --- |
31
+ | √ | √ | √ | √ | √ | √ |
32
+
33
+ **组件名:** `uv-read-more`
34
+
35
+ ## 代码演示 {#examples}
36
+
37
+ ### 基本使用 {#basic}
38
+
39
+ 通过插槽传入正文内容,通过 `showHeight` 设置折叠高度,通过 `toggle` 控制是否可收起。
40
+
41
+ ```vue
42
+ <template>
43
+ <uv-read-more show-height="200rpx" :toggle="true">
44
+ <view class="content">
45
+ <view>丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。</view>
46
+ <view>明月几时有?把酒问青天。不知天上宫阙,今夕是何年。</view>
47
+ <view>我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间。</view>
48
+ <view>转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?</view>
49
+ <view>人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。</view>
50
+ </view>
51
+ </uv-read-more>
52
+ </template>
53
+
54
+ <style scoped>
55
+ .content {
56
+ padding: 0 30rpx;
57
+ }
58
+ </style>
59
+ ```
60
+
61
+ ### 配合解析器使用(uv-parse) {#with-parse}
62
+
63
+ 当插槽内容中包含 `uv-parse`,需在其 `@ready` 或 `@load` 回调中,延迟调用 `read-more` 的 `init()` 方法。
64
+
65
+ ```vue
66
+ <template>
67
+ <uv-read-more ref="readMore">
68
+ <uv-parse class="content" :content="content" @ready="ready"></uv-parse>
69
+ </uv-read-more>
70
+ </template>
71
+
72
+ <script>
73
+ export default {
74
+ data() {
75
+ return {
76
+ content: `<p class="content">...</p>`
77
+ }
78
+ },
79
+ methods: {
80
+ ready() {
81
+ setTimeout(() => {
82
+ this.$refs.readMore.init()
83
+ }, 1000)
84
+ }
85
+ }
86
+ }
87
+ </script>
88
+ ```
89
+
90
+ ### 异步初始化内容 {#async}
91
+
92
+ 当内容从后端异步获取时,可在请求完成并渲染后(`this.$nextTick`)手动调用 `init`。
93
+
94
+ ```vue
95
+ <template>
96
+ <uv-read-more show-height="200px" :toggle="false" ref="readMore">
97
+ <rich-text class="content" :nodes="content"></rich-text>
98
+ </uv-read-more>
99
+ </template>
100
+
101
+ <script>
102
+ export default {
103
+ data() {
104
+ return {
105
+ content: '',
106
+ getContent: '<p class="content">...</p>'
107
+ }
108
+ },
109
+ async onLoad() {
110
+ this.content = await this.getData()
111
+ this.$nextTick(() => {
112
+ this.$refs.readMore.init()
113
+ })
114
+ },
115
+ methods: {
116
+ getData() {
117
+ uni.showLoading({ title: '加载中...' })
118
+ return new Promise(resolve => {
119
+ setTimeout(() => {
120
+ resolve(this.getContent)
121
+ uni.hideLoading()
122
+ }, 1000)
123
+ })
124
+ }
125
+ }
126
+ }
127
+ </script>
128
+ ```
129
+
130
+ ### 自定义阴影样式 {#shadow-style}
131
+
132
+ 默认顶部有一块白色渐隐阴影区域,用于融合按钮区域与文本;可通过 `shadowStyle` 进行完全自定义。
133
+
134
+ ```vue
135
+ <template>
136
+ <uv-read-more show-height="200rpx" :shadowStyle="shadowStyle">
137
+ <view class="content">
138
+ <!-- 文字内容 -->
139
+ </view>
140
+ </uv-read-more>
141
+ </template>
142
+
143
+ <script>
144
+ export default {
145
+ computed: {
146
+ shadowStyle() {
147
+ return {
148
+ // #ifndef APP-NVUE
149
+ backgroundImage: 'linear-gradient(-180deg, rgba(255, 255, 255, 0) 0%, #fff 80%)',
150
+ // #endif
151
+ // #ifdef APP-NVUE
152
+ backgroundImage: 'linear-gradient(to top, #fff, rgba(255, 255, 255, 0.5))',
153
+ // #endif
154
+ paddingTop: '100px',
155
+ marginTop: '-100px'
156
+ }
157
+ }
158
+ }
159
+ }
160
+ </script>
161
+ ```
162
+
163
+ ## API {#api}
164
+
165
+ ### ReadMore Props {#props}
166
+
167
+ | 参数 | 说明 | 类型 | 默认值 | 可选值 |
168
+ | --- | --- | --- | --- | --- |
169
+ | showHeight | 内容超出此高度才显示「展开阅读全文」,单位 rpx | String \| Number | 400 | - |
170
+ | toggle | 展开后是否显示「收起」按钮 | Boolean | false | true \| false |
171
+ | closeText | 折叠状态下的提示文字 | String | 展开阅读全文 | - |
172
+ | openText | 展开状态下的提示文字 | String | 收起 | - |
173
+ | color | 提示文字颜色 | String | #2979ff | - |
174
+ | fontSize | 提示文字大小(默认单位 px) | String \| Number | 14 | - |
175
+ | shadowStyle | 顶部阴影样式对象 | Object | 见上方说明 | - |
176
+ | textIndent | 段落首行缩进字符数 | String | 2em | - |
177
+ | name | 在 `open` / `close` 事件中回传的标识 | String \| Number | - | - |
178
+
179
+ ### Methods {#methods}
180
+
181
+ | 名称 | 说明 |
182
+ | --- | --- |
183
+ | init | 重新初始化组件内部高度计算(嵌套 `uv-parse` 或异步内容时常用) |
184
+
185
+ ### Events {#events}
186
+
187
+ | 事件名 | 说明 | 回调参数 |
188
+ | --- | --- | --- |
189
+ | @open | 内容展开时触发 | `name`:props 中传入的 `name` |
190
+ | @close | 内容收起时触发 | `name`:props 中传入的 `name` |
191
+
@@ -0,0 +1,188 @@
1
+ ---
2
+ group: 布局
3
+ category: Components
4
+ title: ScrollList
5
+ subtitle: 横向滚动列表
6
+ description: 用于同时展示多个商品或分类的横向滚动列表,支持指示器与左右端点事件。
7
+ demo:
8
+ cols: 2
9
+ ---
10
+
11
+ ## 何时使用 {#when-to-use}
12
+
13
+ `uv-scroll-list` 一般用于横向展示多个商品、分类等数量不确定的内容,支持左右滑动滚动。
14
+ 可灵活配置指示器样式,并在滑动到最左/最右时触发事件,方便做更多交互。
15
+
16
+ 注意:
17
+
18
+ - 如在其他组件(如 `uv-vtabs`、`uv-popup` 等)中使用,建议外层包一层 `view` 控制宽度,避免内部计算宽度错误导致被截断。
19
+
20
+ > 完整示例下载地址:[uv-ui 插件市场](https://ext.dcloud.net.cn/plugin?name=uv-ui)
21
+
22
+ ## 平台兼容性 {#platform}
23
+
24
+ | App(vue) | App(nvue) | H5 | 小程序 | VUE2 | VUE3 |
25
+ | --- | --- | --- | --- | --- | --- |
26
+ | √ | √ | √ | √ | √ | √ |
27
+
28
+ **组件名:** `uv-scroll-list`
29
+
30
+ ## 代码演示 {#examples}
31
+
32
+ ### 基本使用 {#basic}
33
+
34
+ 通过默认 slot 传入列表元素即可。
35
+
36
+ ```vue
37
+ <template>
38
+ <uv-scroll-list>
39
+ <view v-for="(item, index) in list" :key="index">
40
+ <image :src="item.image" mode="heightFix" style="height: 200px;"></image>
41
+ </view>
42
+ </uv-scroll-list>
43
+ </template>
44
+
45
+ <script>
46
+ export default {
47
+ data() {
48
+ return {
49
+ list: [
50
+ { image: 'https://via.placeholder.com/200x200.png/3c9cff/fff' },
51
+ { image: 'https://via.placeholder.com/200x200.png/f9ae3d/fff' },
52
+ { image: 'https://via.placeholder.com/200x200.png/5ac725/fff' },
53
+ { image: 'https://via.placeholder.com/200x200.png/f56c6c/fff' },
54
+ { image: 'https://via.placeholder.com/200x200.png/909399/fff' }
55
+ ]
56
+ }
57
+ }
58
+ }
59
+ </script>
60
+ ```
61
+
62
+ ### 使用指示器 {#indicator}
63
+
64
+ ```vue
65
+ <template>
66
+ <uv-scroll-list :indicator="true" indicatorColor="#fff0f0" indicatorActiveColor="#f56c6c">
67
+ <view v-for="(item, index) in list" :key="index">
68
+ <image :src="item.image" mode="heightFix" style="height: 200px;"></image>
69
+ </view>
70
+ </uv-scroll-list>
71
+ </template>
72
+ ```
73
+
74
+ ### 端点事件与商品展示 {#edge-events}
75
+
76
+ 滑动到最左/最右时,会触发 `@left` / `@right` 事件,可用于加载更多或埋点等。
77
+
78
+ ```vue
79
+ <template>
80
+ <uv-scroll-list @right="right" @left="left">
81
+ <view class="scroll-list" style="flex-direction: row;">
82
+ <view
83
+ class="scroll-list__goods-item"
84
+ v-for="(item, index) in list"
85
+ :key="index"
86
+ :class="[(index === 9) && 'scroll-list__goods-item--no-margin-right']"
87
+ >
88
+ <image class="scroll-list__goods-item__image" :src="item.image"></image>
89
+ <text class="scroll-list__goods-item__text">¥{{ item.price }}</text>
90
+ </view>
91
+ <view class="scroll-list__show-more">
92
+ <text class="scroll-list__show-more__text">查看更多</text>
93
+ </view>
94
+ </view>
95
+ </uv-scroll-list>
96
+ </template>
97
+
98
+ <script>
99
+ export default {
100
+ data() {
101
+ return {
102
+ list: [
103
+ { price: '230.5', image: 'https://via.placeholder.com/60x60.png/3c9cff/fff' },
104
+ { price: '74.1', image: 'https://via.placeholder.com/60x60.png/f9ae3d/fff' },
105
+ { price: '8457', image: 'https://via.placeholder.com/60x60.png/5ac725/fff' },
106
+ { price: '1442', image: 'https://via.placeholder.com/60x60.png/f56c6c/fff' },
107
+ { price: '541', image: 'https://via.placeholder.com/60x60.png/909399/fff' },
108
+ { price: '234', image: 'https://via.placeholder.com/60x60.png/3c9cff/fff' },
109
+ { price: '562', image: 'https://via.placeholder.com/60x60.png/f9ae3d/fff' },
110
+ { price: '251.5', image: 'https://via.placeholder.com/60x60.png/5ac725/fff' }
111
+ ]
112
+ }
113
+ },
114
+ methods: {
115
+ left() {
116
+ console.log('left')
117
+ },
118
+ right() {
119
+ console.log('right')
120
+ }
121
+ }
122
+ }
123
+ </script>
124
+
125
+ <style lang="scss">
126
+ @mixin flex($direction: row) {
127
+ /* #ifndef APP-NVUE */
128
+ display: flex;
129
+ /* #endif */
130
+ flex-direction: $direction;
131
+ }
132
+ .scroll-list {
133
+ @include flex(column);
134
+ &__goods-item {
135
+ margin-right: 20px;
136
+ &__image {
137
+ width: 60px;
138
+ height: 60px;
139
+ border-radius: 4px;
140
+ }
141
+ &__text {
142
+ color: #f56c6c;
143
+ text-align: center;
144
+ font-size: 12px;
145
+ margin-top: 5px;
146
+ }
147
+ }
148
+ &__show-more {
149
+ background-color: #fff0f0;
150
+ border-radius: 3px;
151
+ padding: 3px 6px;
152
+ @include flex(column);
153
+ align-items: center;
154
+ &__text {
155
+ font-size: 12px;
156
+ width: 12px;
157
+ color: #f56c6c;
158
+ line-height: 16px;
159
+ }
160
+ }
161
+ }
162
+ </style>
163
+ ```
164
+
165
+ ## 兼容性与性能 {#performance}
166
+
167
+ 组件在 nvue 中引入 `bindingx`,让 JS 运行在视图层,减少视图层与逻辑层通信损耗;
168
+ 在 App-VUE、H5、小程序中则通过 `wxs` 实现,其他平台通过 JS 完成。
169
+
170
+ ## API {#api}
171
+
172
+ ### ScrollList Props {#props}
173
+
174
+ | 参数 | 说明 | 类型 | 默认值 | 可选值 |
175
+ | --- | --- | --- | --- | --- |
176
+ | indicatorWidth | 指示器整体宽度 | String \| Number | 50 | - |
177
+ | indicatorBarWidth | 指示器滑块宽度 | String \| Number | 20 | - |
178
+ | indicator | 是否显示面板指示器 | Boolean | true | false |
179
+ | indicatorColor | 指示器非激活颜色 | String | #f2f2f2 | - |
180
+ | indicatorActiveColor | 指示器滑块颜色 | String | #3c9cff | - |
181
+ | indicatorStyle | 指示器样式(支持 bottom/left/right 定位) | String \| Object | - | - |
182
+
183
+ ### ScrollList Events {#events}
184
+
185
+ | 事件名 | 说明 | 回调参数 |
186
+ | --- | --- | --- |
187
+ | @left | 滑动到最左端时触发 | - |
188
+ | @right | 滑动到最右端时触发 | - |