hy-app 0.5.9 → 0.5.11

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 (290) hide show
  1. package/components/hy-action-sheet/hy-action-sheet.vue +200 -200
  2. package/components/hy-action-sheet/props.ts +71 -71
  3. package/components/hy-action-sheet/typing.d.ts +64 -64
  4. package/components/hy-address-picker/hy-address-picker.vue +1 -1
  5. package/components/hy-address-picker/props.ts +100 -100
  6. package/components/hy-address-picker/typing.d.ts +16 -16
  7. package/components/hy-avatar/hy-avatar.vue +163 -163
  8. package/components/hy-avatar/props.ts +78 -78
  9. package/components/hy-avatar/typing.d.ts +4 -4
  10. package/components/hy-back-top/hy-back-top.vue +90 -90
  11. package/components/hy-back-top/props.ts +60 -60
  12. package/components/hy-back-top/typing.d.ts +4 -4
  13. package/components/hy-badge/hy-badge.vue +97 -97
  14. package/components/hy-badge/props.ts +82 -82
  15. package/components/hy-badge/typing.d.ts +9 -9
  16. package/components/hy-button/hy-button.vue +275 -275
  17. package/components/hy-button/props.ts +135 -135
  18. package/components/hy-button/typing.d.ts +30 -30
  19. package/components/hy-calendar/header.vue +60 -60
  20. package/components/hy-calendar/hy-calendar.vue +362 -362
  21. package/components/hy-calendar/month.vue +537 -537
  22. package/components/hy-calendar/props.ts +159 -159
  23. package/components/hy-calendar/typing.d.ts +6 -6
  24. package/components/hy-card/hy-card.vue +161 -161
  25. package/components/hy-card/props.ts +122 -122
  26. package/components/hy-card/typing.d.ts +12 -12
  27. package/components/hy-cell/hy-cell.vue +33 -33
  28. package/components/hy-cell/props.ts +54 -54
  29. package/components/hy-cell/typing.d.ts +4 -4
  30. package/components/hy-cell-item/hy-cell-item.vue +161 -161
  31. package/components/hy-cell-item/props.ts +66 -66
  32. package/components/hy-cell-item/typing.d.ts +7 -7
  33. package/components/hy-check-button/hy-check-button.vue +96 -96
  34. package/components/hy-check-button/props.ts +74 -74
  35. package/components/hy-check-button/typing.d.ts +44 -44
  36. package/components/hy-checkbox/hy-checkbox.vue +227 -227
  37. package/components/hy-checkbox/props.ts +96 -96
  38. package/components/hy-checkbox/typing.d.ts +8 -8
  39. package/components/hy-checkbox-group/hy-checkbox-group.vue +45 -45
  40. package/components/hy-checkbox-group/props.ts +80 -80
  41. package/components/hy-checkbox-group/typing.d.ts +6 -6
  42. package/components/hy-checkbox-item/hy-checkbox-item.vue +199 -199
  43. package/components/hy-checkbox-item/props.ts +24 -24
  44. package/components/hy-checkbox-item/typing.d.ts +7 -7
  45. package/components/hy-code-input/hy-code-input.vue +231 -231
  46. package/components/hy-code-input/props.ts +88 -88
  47. package/components/hy-code-input/typing.d.ts +8 -8
  48. package/components/hy-config-provider/hy-config-provider.vue +53 -53
  49. package/components/hy-config-provider/props.ts +28 -28
  50. package/components/hy-count-down/hy-count-down.vue +170 -170
  51. package/components/hy-count-down/index.ts +52 -52
  52. package/components/hy-count-down/props.ts +32 -32
  53. package/components/hy-count-down/typing.d.ts +14 -14
  54. package/components/hy-count-to/hy-count-to.vue +218 -218
  55. package/components/hy-count-to/props.ts +62 -62
  56. package/components/hy-count-to/typing.d.ts +4 -4
  57. package/components/hy-coupon/hy-coupon.vue +172 -172
  58. package/components/hy-coupon/index.scss +171 -171
  59. package/components/hy-coupon/props.ts +103 -103
  60. package/components/hy-coupon/typing.d.ts +14 -14
  61. package/components/hy-datetime-picker/hy-datetime-picker.vue +521 -521
  62. package/components/hy-datetime-picker/props.ts +142 -142
  63. package/components/hy-datetime-picker/typing.d.ts +20 -20
  64. package/components/hy-divider/hy-divider.vue +132 -132
  65. package/components/hy-divider/props.ts +80 -80
  66. package/components/hy-dropdown/hy-dropdown.vue +60 -60
  67. package/components/hy-dropdown/props.ts +40 -40
  68. package/components/hy-dropdown-item/hy-dropdown-item.vue +206 -206
  69. package/components/hy-dropdown-item/props.ts +21 -21
  70. package/components/hy-dropdown-item/typing.d.ts +17 -17
  71. package/components/hy-empty/hy-empty.vue +116 -116
  72. package/components/hy-empty/icon.ts +72 -72
  73. package/components/hy-empty/props.ts +60 -60
  74. package/components/hy-empty/typing.d.ts +38 -38
  75. package/components/hy-flex/hy-flex.vue +53 -53
  76. package/components/hy-flex/index.scss +8 -8
  77. package/components/hy-flex/props.ts +58 -58
  78. package/components/hy-flex/typing.d.ts +21 -21
  79. package/components/hy-float-button/hy-float-button.vue +378 -378
  80. package/components/hy-float-button/props.ts +111 -111
  81. package/components/hy-float-button/typing.d.ts +35 -35
  82. package/components/hy-folding-panel/hy-folding-panel.vue +109 -109
  83. package/components/hy-folding-panel/props.ts +42 -42
  84. package/components/hy-folding-panel/typing.d.ts +19 -19
  85. package/components/hy-folding-panel-item/hy-folding-panel-item.vue +183 -183
  86. package/components/hy-folding-panel-item/props.ts +81 -81
  87. package/components/hy-folding-panel-item/typing.d.ts +37 -37
  88. package/components/hy-form/hy-form.vue +220 -220
  89. package/components/hy-form/props.ts +37 -37
  90. package/components/hy-form/typing.d.ts +41 -41
  91. package/components/hy-form-group/hy-form-group.vue +333 -333
  92. package/components/hy-form-group/props.ts +105 -105
  93. package/components/hy-form-item/hy-form-item.vue +176 -176
  94. package/components/hy-form-item/index.scss +0 -1
  95. package/components/hy-form-item/props.ts +25 -25
  96. package/components/hy-form-item/typing.d.ts +30 -30
  97. package/components/hy-grid/hy-grid.vue +109 -109
  98. package/components/hy-grid/props.ts +60 -60
  99. package/components/hy-grid/typing.d.ts +35 -35
  100. package/components/hy-icon/hy-icon.vue +112 -112
  101. package/components/hy-icon/index.scss +0 -3
  102. package/components/hy-icon/props.ts +79 -79
  103. package/components/hy-icon/typing.d.ts +9 -9
  104. package/components/hy-image/hy-image.vue +192 -192
  105. package/components/hy-image/props.ts +107 -107
  106. package/components/hy-image/typing.d.ts +10 -10
  107. package/components/hy-input/hy-input.vue +333 -333
  108. package/components/hy-input/index.scss +5 -0
  109. package/components/hy-input/props.ts +186 -186
  110. package/components/hy-input/typing.d.ts +31 -31
  111. package/components/hy-line/hy-line.vue +55 -55
  112. package/components/hy-line/props.ts +43 -43
  113. package/components/hy-line-progress/hy-line-progress.vue +102 -102
  114. package/components/hy-line-progress/index.scss +1 -0
  115. package/components/hy-line-progress/props.ts +33 -33
  116. package/components/hy-list/hy-list.vue +226 -226
  117. package/components/hy-list/props.ts +69 -69
  118. package/components/hy-list/typing.d.ts +6 -6
  119. package/components/hy-loading/hy-loading.vue +107 -107
  120. package/components/hy-loading/props.ts +65 -65
  121. package/components/hy-menu/hy-menu.vue +159 -159
  122. package/components/hy-menu/props.ts +44 -44
  123. package/components/hy-menu/typing.d.ts +34 -34
  124. package/components/hy-modal/hy-modal.vue +173 -173
  125. package/components/hy-modal/props.ts +90 -90
  126. package/components/hy-modal/typing.d.ts +11 -11
  127. package/components/hy-navbar/hy-navbar.vue +144 -144
  128. package/components/hy-navbar/props.ts +78 -78
  129. package/components/hy-navbar/typing.d.ts +6 -6
  130. package/components/hy-notice-bar/hy-column-notice.vue +94 -94
  131. package/components/hy-notice-bar/hy-notice-bar.vue +96 -96
  132. package/components/hy-notice-bar/hy-row-notice.vue +121 -121
  133. package/components/hy-notice-bar/props.ts +85 -85
  134. package/components/hy-notice-bar/typing.d.ts +8 -8
  135. package/components/hy-notify/hy-notify.vue +174 -174
  136. package/components/hy-notify/props.ts +51 -51
  137. package/components/hy-number-step/hy-number-step.vue +367 -367
  138. package/components/hy-number-step/props.ts +112 -112
  139. package/components/hy-number-step/typing.d.ts +16 -16
  140. package/components/hy-overlay/hy-overlay.vue +60 -60
  141. package/components/hy-overlay/props.ts +33 -33
  142. package/components/hy-overlay/typing.d.ts +4 -4
  143. package/components/hy-pagination/hy-pagination.vue +135 -135
  144. package/components/hy-pagination/props.ts +55 -55
  145. package/components/hy-pagination/typing.d.ts +10 -10
  146. package/components/hy-picker/hy-picker.vue +7 -5
  147. package/components/hy-picker/props.ts +7 -2
  148. package/components/hy-picker/typing.d.ts +9 -5
  149. package/components/hy-popover/hy-popover.vue +251 -251
  150. package/components/hy-popover/props.ts +51 -51
  151. package/components/hy-popover/typing.d.ts +39 -39
  152. package/components/hy-popup/hy-popup.vue +197 -197
  153. package/components/hy-popup/props.ts +85 -85
  154. package/components/hy-popup/typing.d.ts +10 -10
  155. package/components/hy-price/hy-price.vue +79 -79
  156. package/components/hy-price/props.ts +54 -54
  157. package/components/hy-price/typing.d.ts +4 -4
  158. package/components/hy-qrcode/hy-qrcode.vue +216 -216
  159. package/components/hy-qrcode/props.ts +70 -70
  160. package/components/hy-qrcode/qrcode.js +1304 -1304
  161. package/components/hy-qrcode/typing.d.ts +8 -8
  162. package/components/hy-radio/hy-radio.vue +226 -226
  163. package/components/hy-radio/props.ts +1 -1
  164. package/components/hy-radio/typing.d.ts +8 -8
  165. package/components/hy-rate/hy-rate.vue +239 -239
  166. package/components/hy-rate/props.ts +77 -77
  167. package/components/hy-rate/typing.d.ts +6 -6
  168. package/components/hy-read-more/hy-read-more.vue +130 -130
  169. package/components/hy-read-more/props.ts +45 -45
  170. package/components/hy-read-more/typing.d.ts +6 -6
  171. package/components/hy-rolling-num/hy-rolling-num.vue +188 -188
  172. package/components/hy-rolling-num/props.ts +68 -68
  173. package/components/hy-scroll-list/hy-scroll-list.vue +123 -123
  174. package/components/hy-scroll-list/props.ts +22 -22
  175. package/components/hy-scroll-list/typing.d.ts +6 -6
  176. package/components/hy-search/hy-search.vue +221 -221
  177. package/components/hy-search/props.ts +131 -131
  178. package/components/hy-search/typing.d.ts +22 -22
  179. package/components/hy-signature/hy-signature.vue +640 -640
  180. package/components/hy-signature/props.ts +118 -118
  181. package/components/hy-signature/typing.d.ts +93 -93
  182. package/components/hy-slider/hy-slider.vue +444 -444
  183. package/components/hy-slider/props.ts +77 -77
  184. package/components/hy-slider/typing.d.ts +10 -10
  185. package/components/hy-status-bar/hy-status-bar.vue +41 -41
  186. package/components/hy-status-bar/props.ts +8 -8
  187. package/components/hy-status-bar/typing.d.ts +12 -12
  188. package/components/hy-steps/hy-steps.vue +267 -267
  189. package/components/hy-steps/props.ts +49 -49
  190. package/components/hy-steps/typing.d.ts +21 -21
  191. package/components/hy-sticky/hy-sticky.vue +226 -226
  192. package/components/hy-sticky/props.ts +24 -24
  193. package/components/hy-sticky/typing.d.ts +4 -4
  194. package/components/hy-submit-bar/hy-submit-bar.vue +189 -189
  195. package/components/hy-submit-bar/props.ts +91 -91
  196. package/components/hy-submit-bar/typing.d.ts +24 -24
  197. package/components/hy-subsection/hy-subsection.vue +207 -207
  198. package/components/hy-subsection/props.ts +52 -52
  199. package/components/hy-subsection/typing.d.ts +13 -13
  200. package/components/hy-swipe-action/hy-swipe-action.vue +323 -323
  201. package/components/hy-swipe-action/index.ts +25 -25
  202. package/components/hy-swipe-action/props.ts +47 -47
  203. package/components/hy-swipe-action/typing.d.ts +25 -25
  204. package/components/hy-swiper/hy-swiper-indicator.vue +75 -75
  205. package/components/hy-swiper/hy-swiper.vue +224 -224
  206. package/components/hy-swiper/props.ts +128 -128
  207. package/components/hy-swiper/typing.d.ts +26 -26
  208. package/components/hy-switch/hy-switch.vue +173 -173
  209. package/components/hy-switch/props.ts +61 -61
  210. package/components/hy-switch/typing.d.ts +8 -8
  211. package/components/hy-tabbar/hy-tabbar.vue +136 -136
  212. package/components/hy-tabbar/props.ts +59 -59
  213. package/components/hy-tabbar/typing.d.ts +21 -21
  214. package/components/hy-tabbar-group/hy-tabbar-group.vue +87 -87
  215. package/components/hy-tabbar-group/props.ts +78 -78
  216. package/components/hy-tabbar-group/typing.d.ts +16 -16
  217. package/components/hy-tabbar-item/hy-tabbar-item.vue +103 -103
  218. package/components/hy-tabbar-item/typing.d.ts +10 -10
  219. package/components/hy-table/hy-table.vue +358 -358
  220. package/components/hy-table/props.ts +47 -47
  221. package/components/hy-table/typing.d.ts +34 -34
  222. package/components/hy-tabs/hy-tabs.vue +335 -335
  223. package/components/hy-tabs/props.ts +77 -77
  224. package/components/hy-tabs/typing.d.ts +33 -33
  225. package/components/hy-tag/hy-tag.vue +174 -174
  226. package/components/hy-tag/props.ts +89 -89
  227. package/components/hy-tag/typing.d.ts +13 -13
  228. package/components/hy-text/hy-text.vue +237 -237
  229. package/components/hy-text/props.ts +115 -115
  230. package/components/hy-text/typing.d.ts +6 -6
  231. package/components/hy-textarea/hy-textarea.vue +197 -197
  232. package/components/hy-textarea/index.scss +5 -0
  233. package/components/hy-textarea/props.ts +116 -116
  234. package/components/hy-textarea/typing.d.ts +22 -22
  235. package/components/hy-toast/hy-toast.vue +190 -190
  236. package/components/hy-toast/typing.d.ts +38 -38
  237. package/components/hy-tooltip/hy-tooltip.vue +277 -277
  238. package/components/hy-tooltip/props.ts +78 -78
  239. package/components/hy-tooltip/typing.d.ts +4 -4
  240. package/components/hy-transition/hy-transition.vue +157 -157
  241. package/components/hy-transition/props.ts +32 -32
  242. package/components/hy-transition/typing.d.ts +16 -16
  243. package/components/hy-upload/hy-upload.vue +385 -385
  244. package/components/hy-upload/props.ts +132 -132
  245. package/components/hy-upload/typing.d.ts +65 -65
  246. package/components/hy-warn/hy-warn.vue +115 -115
  247. package/components/hy-warn/props.ts +49 -49
  248. package/components/hy-warn/typing.d.ts +6 -6
  249. package/components/hy-waterfall/hy-waterfall.vue +191 -191
  250. package/components/hy-waterfall/props.ts +21 -21
  251. package/components/hy-watermark/hy-watermark.vue +978 -978
  252. package/components/hy-watermark/props.ts +104 -104
  253. package/components/index.ts +183 -183
  254. package/global.d.ts +91 -91
  255. package/index.ts +1 -1
  256. package/libs/api/http.ts +140 -140
  257. package/libs/api/index.ts +1 -1
  258. package/libs/common/index.ts +2 -2
  259. package/libs/common/queue.ts +28 -28
  260. package/libs/composables/index.ts +6 -6
  261. package/libs/composables/usePopover.ts +241 -241
  262. package/libs/composables/useQueue.ts +53 -53
  263. package/libs/composables/useShakeService.ts +64 -64
  264. package/libs/composables/useShare.ts +42 -42
  265. package/libs/composables/useToast.ts +45 -45
  266. package/libs/composables/useTouch.ts +51 -51
  267. package/libs/config/color.ts +7 -7
  268. package/libs/config/icon.ts +430 -430
  269. package/libs/config/index.ts +2 -2
  270. package/libs/css/iconfont.css +443 -443
  271. package/libs/css/theme.scss +1 -1
  272. package/libs/global/index.ts +6 -6
  273. package/libs/global/register-properties.ts +37 -37
  274. package/libs/index.ts +7 -7
  275. package/libs/typing/index.ts +4 -4
  276. package/libs/typing/modules/common.d.ts +139 -139
  277. package/libs/typing/modules/enum.ts +67 -67
  278. package/libs/typing/modules/form.ts +5 -1
  279. package/libs/typing/modules/http.ts +17 -17
  280. package/libs/typing/modules/icon.d.ts +366 -366
  281. package/libs/typing/modules/rect.ts +10 -10
  282. package/libs/utils/base64.ts +119 -119
  283. package/libs/utils/calendar.js +1021 -1021
  284. package/libs/utils/colorGradient.ts +112 -112
  285. package/libs/utils/index.ts +5 -5
  286. package/libs/utils/inside.ts +350 -361
  287. package/libs/utils/inspect.ts +171 -171
  288. package/libs/utils/utils.ts +521 -521
  289. package/package.json +18 -18
  290. package/web-types.json +1 -1
@@ -1,444 +1,444 @@
1
- <template>
2
- <view :class="['hy-slider', customClass]" :style="[customStyle]">
3
- <template v-if="!useNative || isRange">
4
- <view
5
- ref="hy-slider__inner"
6
- class="hy-slider__inner"
7
- @tap="onClick"
8
- @onTouchStart="onTouchStart2($event, 1)"
9
- @touchmove="onTouchMove2($event, 1)"
10
- @touchend="onTouchEnd2($event, 1)"
11
- @touchcancel="onTouchEnd2($event, 1)"
12
- :class="[disabled ? 'hy-slider__disabled' : '']"
13
- :style="{
14
- height:
15
- isRange && showValue ? addUnit(getPx(blockSize) + 24) : addUnit(blockSize)
16
- }"
17
- >
18
- <view
19
- ref="hy-slider__base"
20
- class="hy-slider__base"
21
- :style="[
22
- {
23
- height: addUnit(height),
24
- backgroundColor: inactiveColor
25
- }
26
- ]"
27
- ></view>
28
- <view
29
- @tap="onClick"
30
- class="hy-slider__gap"
31
- :style="[
32
- barStyle,
33
- {
34
- height: addUnit(height),
35
- marginTop: '-' + addUnit(height),
36
- backgroundColor: activeColor
37
- }
38
- ]"
39
- ></view>
40
- <view
41
- v-if="isRange"
42
- class="hy-slider__gap hy-slider__gap-0"
43
- :style="[
44
- barStyle0,
45
- {
46
- height: addUnit(height),
47
- marginTop: '-' + addUnit(height),
48
- backgroundColor: inactiveColor
49
- }
50
- ]"
51
- ></view>
52
- <text
53
- v-if="isRange && showValue"
54
- class="hy-slider__show-range-value"
55
- :style="{
56
- left: blockLeft(barStyle0?.width, blockSize)
57
- }"
58
- >
59
- {{ rangeValue[0] }}
60
- </text>
61
- <text
62
- v-if="isRange && showValue"
63
- class="hy-slider__show-range-value"
64
- :style="{
65
- left: blockLeft(barStyle?.width, blockSize)
66
- }"
67
- >
68
- {{ rangeValue[1] }}
69
- </text>
70
- <template v-if="isRange">
71
- <view
72
- class="hy-slider__button--wrap hy-slider__button--wrap-0"
73
- @touchstart="onTouchStart($event, 0)"
74
- @touchmove="onTouchMove($event, 0)"
75
- @touchend="onTouchEnd($event, 0)"
76
- @touchcancel="onTouchEnd($event, 0)"
77
- :style="{
78
- left: blockLeft(barStyle0?.width, blockSize)
79
- }"
80
- >
81
- <slot name="min" v-if="$slots.min || $slots.$min" />
82
- <view
83
- v-else
84
- class="hy-slider__button"
85
- :style="[
86
- blockStyle,
87
- {
88
- height: addUnit(blockSize),
89
- width: addUnit(blockSize),
90
- backgroundColor: blockColor
91
- }
92
- ]"
93
- ></view>
94
- </view>
95
- </template>
96
- <view
97
- class="hy-slider__button--wrap"
98
- @touchstart="onTouchStart"
99
- @touchmove="onTouchMove"
100
- @touchend="onTouchEnd"
101
- @touchcancel="onTouchEnd"
102
- :style="{
103
- left: blockLeft(barStyle?.width, blockSize)
104
- }"
105
- >
106
- <slot name="max" v-if="isRange && ($slots.max || $slots.$max)" />
107
- <slot v-else-if="$slots.default || $slots.$default" />
108
- <view
109
- v-else
110
- class="hy-slider__button"
111
- :style="[
112
- blockStyle,
113
- {
114
- height: addUnit(blockSize),
115
- width: addUnit(blockSize),
116
- backgroundColor: blockColor
117
- }
118
- ]"
119
- ></view>
120
- </view>
121
- </view>
122
- <view class="hy-slider__show-value" v-if="showValue && !isRange">{{ modelValue }}</view>
123
- </template>
124
- <slider
125
- class="hy-slider__native"
126
- v-else
127
- :min="min"
128
- :max="max"
129
- :step="step"
130
- :value="modelValue"
131
- :activeColor="activeColor"
132
- :backgroundColor="inactiveColor"
133
- :blockSize="blockSize"
134
- :blockColor="blockColor"
135
- :showValue="showValue"
136
- :disabled="disabled"
137
- @changing="changingHandler"
138
- @change="changeHandler"
139
- ></slider>
140
- </view>
141
- </template>
142
-
143
- <script lang="ts">
144
- export default {
145
- name: 'hy-slider',
146
- options: {
147
- addGlobalClass: true,
148
- virtualHost: true,
149
- styleIsolation: 'shared'
150
- }
151
- }
152
- </script>
153
-
154
- <script setup lang="ts">
155
- import { computed, getCurrentInstance, onMounted, ref, watch } from 'vue'
156
- import type { CSSProperties } from 'vue'
157
- import { addUnit, error, getRect, getPx } from '../../libs'
158
- import type { ISliderEmits } from './typing'
159
- import type { SliderOnChangingEvent } from '@uni-helper/uni-types'
160
- import sliderProps from './props'
161
-
162
- /**
163
- * 一般用于表单中,手动选择一个区间范围的场景。
164
- * @displayName hy-slider
165
- */
166
- defineOptions({})
167
-
168
- const props = defineProps(sliderProps)
169
- const emit = defineEmits<ISliderEmits>()
170
-
171
- const startX = ref(0)
172
- const status = ref('end')
173
- const newValue = ref(0)
174
- const distanceX = ref(0)
175
- const startValue0 = ref(0)
176
- const startValue = ref(0)
177
- const barStyle0 = ref<CSSProperties>()
178
- const barStyle = ref<CSSProperties>()
179
- const sliderRect = ref<UniNamespace.NodeInfo>({
180
- left: 0,
181
- width: 0
182
- })
183
- const instance = getCurrentInstance()
184
-
185
- const blockLeft = computed(() => {
186
- return (slideWidth: string | number | undefined, blockWidth: string | number): string => {
187
- if (slideWidth) {
188
- return addUnit(getPx(slideWidth) + getPx(blockWidth) / 2)
189
- }
190
- return '0px'
191
- }
192
- })
193
-
194
- watch(
195
- () => props.modelValue,
196
- (newValue) => {
197
- // 只有在非滑动状态时,才可以通过value更新滑块值,这里监听,是为了让用户触发
198
- if (status.value === 'end') updateValue(newValue, false)
199
- }
200
- )
201
-
202
- watch(
203
- () => props.rangeValue,
204
- (newValue) => {
205
- if (status.value === 'end') {
206
- updateValue(newValue[0], false, 0)
207
- updateValue(newValue[1], false, 1)
208
- }
209
- },
210
- { deep: true }
211
- )
212
-
213
- onMounted(async () => {
214
- // 获取滑块条的尺寸信息
215
- if (!props.useNative) {
216
- // #ifndef APP-NVUE
217
- sliderRect.value = (await getRect(
218
- '.hy-slider__base',
219
- false,
220
- instance
221
- )) as UniNamespace.NodeInfo
222
- // console.log('sliderRect', sliderRect.value)
223
- if (sliderRect.value.width == 0) {
224
- error('如在弹窗等元素中使用,请使用v-if来显示滑块,否则无法计算长度。')
225
- }
226
- init()
227
- // #endif
228
- }
229
- })
230
-
231
- const init = () => {
232
- if (props.isRange) {
233
- updateValue(props.rangeValue[0], false, 0)
234
- updateValue(props.rangeValue[1], false, 1)
235
- } else {
236
- updateValue(props.modelValue, false)
237
- }
238
- }
239
-
240
- // native拖动过程中触发
241
- const changingHandler = (e: SliderOnChangingEvent) => {
242
- const { value } = e.detail
243
- // 更新v-model的值
244
- emit('update:modelValue', value)
245
- // 触发事件
246
- emit('changing', value)
247
- }
248
-
249
- // native滑动结束时触发
250
- const changeHandler = (e: SliderOnChangingEvent) => {
251
- const { value } = e.detail
252
- // 更新v-model的值
253
- emit('update:modelValue', value)
254
- // 触发事件
255
- emit('change', value)
256
- }
257
-
258
- const onTouchStart = (e: TouchEvent, index = 1) => {
259
- if (props.disabled) return
260
- startX.value = 0
261
- // 触摸点集
262
- let touches = e.touches[0]
263
- // 触摸点到屏幕左边的距离
264
- startX.value = touches.clientX
265
- // 此处的this.modelValue虽为props值,但是通过$emit('update:modelValue')进行了修改
266
- if (props.isRange) {
267
- startValue0.value = format(props.rangeValue[0], 0)
268
- startValue.value = format(props.rangeValue[1], 1)
269
- } else {
270
- startValue.value = format(props.modelValue)
271
- }
272
- // 标示当前的状态为开始触摸滑动
273
- status.value = 'start'
274
-
275
- let clientX = 0
276
- // #ifndef APP-NVUE
277
- clientX = touches.clientX
278
- // #endif
279
- // #ifdef APP-NVUE
280
- clientX = touches.screenX
281
- // #endif
282
- distanceX.value = clientX - sliderRect.value.left!
283
- // 获得移动距离对整个滑块的值,此为带有多位小数的值,不能用此更新视图
284
- // 否则造成通信阻塞,需要每改变一个step值时修改一次视图
285
- newValue.value =
286
- (distanceX.value / sliderRect.value.width!) * (props.max - props.min) + props.min
287
- status.value = 'moving'
288
- // 发出moving事件
289
- let $crtFmtValue = updateValue(newValue.value, true, index)
290
- emit('changing', $crtFmtValue)
291
- }
292
- const onTouchMove = (e: TouchEvent, index = 1) => {
293
- if (props.disabled) return
294
- // 连续触摸的过程会一直触发本方法,但只有手指触发且移动了才被认为是拖动了,才发出事件
295
- // 触摸后第一次移动已经将status设置为moving状态,故触摸第二次移动不会触发本事件
296
- if (status.value == 'start') emit('start')
297
- let touches = e.touches[0]
298
- // console.log('touchs', touches)
299
- // 滑块的左边不一定跟屏幕左边接壤,所以需要减去最外层父元素的左边值
300
- let clientX = 0
301
- // #ifndef APP-NVUE
302
- clientX = touches.clientX
303
- // #endif
304
- // #ifdef APP-NVUE
305
- clientX = touches.screenX
306
- // #endif
307
- distanceX.value = clientX - sliderRect.value.left!
308
- // 获得移动距离对整个滑块的值,此为带有多位小数的值,不能用此更新视图
309
- // 否则造成通信阻塞,需要每改变一个step值时修改一次视图
310
- newValue.value =
311
- (distanceX.value / sliderRect.value.width!) * (props.max - props.min) + props.min
312
- status.value = 'moving'
313
- // 发出moving事件
314
- let $crtFmtValue = updateValue(newValue.value, true, index)
315
- emit('changing', $crtFmtValue)
316
- }
317
- const onTouchEnd = (e: TouchEvent, index = 1) => {
318
- if (props.disabled) return
319
- if (status.value === 'moving') {
320
- let $crtFmtValue = updateValue(newValue.value, false, index)
321
- emit('change', $crtFmtValue)
322
- }
323
- status.value = 'end'
324
- }
325
- const onTouchStart2 = (e: TouchEvent, index = 1) => {
326
- if (!props.isRange) {
327
- // this.onChangeStart(event, index);
328
- }
329
- }
330
- const onTouchMove2 = (e: TouchEvent, index = 1) => {
331
- if (!props.isRange) {
332
- // this.onTouchMove(event, index);
333
- }
334
- }
335
- const onTouchEnd2 = (e: TouchEvent, index = 1) => {
336
- if (!props.isRange) {
337
- // this.onTouchEnd(event, index);
338
- }
339
- }
340
- const onClick = (e: TouchEvent) => {
341
- if (props.disabled) return
342
- // 直接点击滑块的情况,计算方式与onTouchMove方法相同
343
- // #ifndef APP-NVUE
344
-
345
- let x
346
- // #ifdef MP-ALIPAY
347
- x = e.detail.clientX
348
- // #endif
349
- // #ifndef MP-ALIPAY
350
- x = e.detail.x
351
- // #endif
352
-
353
- const clientX = x - sliderRect.value.left!
354
- newValue.value = (clientX / sliderRect.value.width!) * (props.max - props.min) + props.min
355
- updateValue(newValue.value, false, 1)
356
- // #endif
357
- }
358
- const updateValue = (value: number, drag: boolean, index: number = 1): number | number[] => {
359
- // 去掉小数部分,同时也是对step步进的处理
360
- let valueFormat = format(value, index)
361
- // 不允许滑动的值超过max最大值
362
- if (valueFormat > props.max) {
363
- valueFormat = props.max
364
- }
365
- // 设置移动的距离,不能用百分比,因为NVUE不支持。
366
- const width = Math.min(
367
- ((valueFormat - props.min) / (props.max - props.min)) * sliderRect.value.width!,
368
- sliderRect.value.width!
369
- )
370
- const barStyle_1: CSSProperties = {
371
- width: width + 'px'
372
- }
373
- // 移动期间无需过渡动画
374
- if (drag) {
375
- barStyle_1.transition = 'none'
376
- } else {
377
- // 非移动期间,删掉对过渡为空的声明,让css中的声明起效
378
- delete barStyle_1.transition
379
- }
380
- // 修改value值
381
- if (props.isRange) {
382
- props.rangeValue[index] = valueFormat
383
- emit('update:modelValue', props.rangeValue)
384
- } else {
385
- emit('update:modelValue', valueFormat)
386
- }
387
-
388
- switch (index) {
389
- case 0:
390
- barStyle0.value = barStyle_1
391
- break
392
- case 1:
393
- barStyle.value = barStyle_1
394
- break
395
- default:
396
- break
397
- }
398
- if (props.isRange) {
399
- return props.rangeValue
400
- } else {
401
- return valueFormat
402
- }
403
- }
404
- const format = (value: number, index = 1): number => {
405
- // 将小数变成整数,为了减少对视图的更新,造成视图层与逻辑层的阻塞
406
- if (props.isRange) {
407
- switch (index) {
408
- case 0:
409
- return (
410
- Math.round(
411
- Math.max(
412
- props.min,
413
- Math.min(value, props.rangeValue[1] - props.step, props.max)
414
- ) / props.step
415
- ) * props.step
416
- )
417
- case 1:
418
- return (
419
- Math.round(
420
- Math.max(
421
- props.min,
422
- props.rangeValue[0] + props.step,
423
- Math.min(value, props.max)
424
- ) / props.step
425
- ) * props.step
426
- )
427
- default:
428
- return 0
429
- }
430
- } else {
431
- // 解决精度丢失
432
- return (
433
- (Math.round(Math.max(props.min, Math.min(value, props.max)) / props.step) *
434
- 1000 *
435
- props.step) /
436
- 1000
437
- )
438
- }
439
- }
440
- </script>
441
-
442
- <style lang="scss" scoped>
443
- @import './index.scss';
444
- </style>
1
+ <template>
2
+ <view :class="['hy-slider', customClass]" :style="[customStyle]">
3
+ <template v-if="!useNative || isRange">
4
+ <view
5
+ ref="hy-slider__inner"
6
+ class="hy-slider__inner"
7
+ @tap="onClick"
8
+ @onTouchStart="onTouchStart2($event, 1)"
9
+ @touchmove="onTouchMove2($event, 1)"
10
+ @touchend="onTouchEnd2($event, 1)"
11
+ @touchcancel="onTouchEnd2($event, 1)"
12
+ :class="[disabled ? 'hy-slider__disabled' : '']"
13
+ :style="{
14
+ height:
15
+ isRange && showValue ? addUnit(getPx(blockSize) + 24) : addUnit(blockSize)
16
+ }"
17
+ >
18
+ <view
19
+ ref="hy-slider__base"
20
+ class="hy-slider__base"
21
+ :style="[
22
+ {
23
+ height: addUnit(height),
24
+ backgroundColor: inactiveColor
25
+ }
26
+ ]"
27
+ ></view>
28
+ <view
29
+ @tap="onClick"
30
+ class="hy-slider__gap"
31
+ :style="[
32
+ barStyle,
33
+ {
34
+ height: addUnit(height),
35
+ marginTop: '-' + addUnit(height),
36
+ backgroundColor: activeColor
37
+ }
38
+ ]"
39
+ ></view>
40
+ <view
41
+ v-if="isRange"
42
+ class="hy-slider__gap hy-slider__gap-0"
43
+ :style="[
44
+ barStyle0,
45
+ {
46
+ height: addUnit(height),
47
+ marginTop: '-' + addUnit(height),
48
+ backgroundColor: inactiveColor
49
+ }
50
+ ]"
51
+ ></view>
52
+ <text
53
+ v-if="isRange && showValue"
54
+ class="hy-slider__show-range-value"
55
+ :style="{
56
+ left: blockLeft(barStyle0?.width, blockSize)
57
+ }"
58
+ >
59
+ {{ rangeValue[0] }}
60
+ </text>
61
+ <text
62
+ v-if="isRange && showValue"
63
+ class="hy-slider__show-range-value"
64
+ :style="{
65
+ left: blockLeft(barStyle?.width, blockSize)
66
+ }"
67
+ >
68
+ {{ rangeValue[1] }}
69
+ </text>
70
+ <template v-if="isRange">
71
+ <view
72
+ class="hy-slider__button--wrap hy-slider__button--wrap-0"
73
+ @touchstart="onTouchStart($event, 0)"
74
+ @touchmove="onTouchMove($event, 0)"
75
+ @touchend="onTouchEnd($event, 0)"
76
+ @touchcancel="onTouchEnd($event, 0)"
77
+ :style="{
78
+ left: blockLeft(barStyle0?.width, blockSize)
79
+ }"
80
+ >
81
+ <slot name="min" v-if="$slots.min || $slots.$min" />
82
+ <view
83
+ v-else
84
+ class="hy-slider__button"
85
+ :style="[
86
+ blockStyle,
87
+ {
88
+ height: addUnit(blockSize),
89
+ width: addUnit(blockSize),
90
+ backgroundColor: blockColor
91
+ }
92
+ ]"
93
+ ></view>
94
+ </view>
95
+ </template>
96
+ <view
97
+ class="hy-slider__button--wrap"
98
+ @touchstart="onTouchStart"
99
+ @touchmove="onTouchMove"
100
+ @touchend="onTouchEnd"
101
+ @touchcancel="onTouchEnd"
102
+ :style="{
103
+ left: blockLeft(barStyle?.width, blockSize)
104
+ }"
105
+ >
106
+ <slot name="max" v-if="isRange && ($slots.max || $slots.$max)" />
107
+ <slot v-else-if="$slots.default || $slots.$default" />
108
+ <view
109
+ v-else
110
+ class="hy-slider__button"
111
+ :style="[
112
+ blockStyle,
113
+ {
114
+ height: addUnit(blockSize),
115
+ width: addUnit(blockSize),
116
+ backgroundColor: blockColor
117
+ }
118
+ ]"
119
+ ></view>
120
+ </view>
121
+ </view>
122
+ <view class="hy-slider__show-value" v-if="showValue && !isRange">{{ modelValue }}</view>
123
+ </template>
124
+ <slider
125
+ class="hy-slider__native"
126
+ v-else
127
+ :min="min"
128
+ :max="max"
129
+ :step="step"
130
+ :value="modelValue"
131
+ :activeColor="activeColor"
132
+ :backgroundColor="inactiveColor"
133
+ :blockSize="blockSize"
134
+ :blockColor="blockColor"
135
+ :showValue="showValue"
136
+ :disabled="disabled"
137
+ @changing="changingHandler"
138
+ @change="changeHandler"
139
+ ></slider>
140
+ </view>
141
+ </template>
142
+
143
+ <script lang="ts">
144
+ export default {
145
+ name: 'hy-slider',
146
+ options: {
147
+ addGlobalClass: true,
148
+ virtualHost: true,
149
+ styleIsolation: 'shared'
150
+ }
151
+ }
152
+ </script>
153
+
154
+ <script setup lang="ts">
155
+ import { computed, getCurrentInstance, onMounted, ref, watch } from 'vue'
156
+ import type { CSSProperties } from 'vue'
157
+ import { addUnit, error, getRect, getPx } from '../../libs'
158
+ import type { ISliderEmits } from './typing'
159
+ import type { SliderOnChangingEvent } from '@uni-helper/uni-types'
160
+ import sliderProps from './props'
161
+
162
+ /**
163
+ * 一般用于表单中,手动选择一个区间范围的场景。
164
+ * @displayName hy-slider
165
+ */
166
+ defineOptions({})
167
+
168
+ const props = defineProps(sliderProps)
169
+ const emit = defineEmits<ISliderEmits>()
170
+
171
+ const startX = ref(0)
172
+ const status = ref('end')
173
+ const newValue = ref(0)
174
+ const distanceX = ref(0)
175
+ const startValue0 = ref(0)
176
+ const startValue = ref(0)
177
+ const barStyle0 = ref<CSSProperties>()
178
+ const barStyle = ref<CSSProperties>()
179
+ const sliderRect = ref<UniNamespace.NodeInfo>({
180
+ left: 0,
181
+ width: 0
182
+ })
183
+ const instance = getCurrentInstance()
184
+
185
+ const blockLeft = computed(() => {
186
+ return (slideWidth: string | number | undefined, blockWidth: string | number): string => {
187
+ if (slideWidth) {
188
+ return addUnit(getPx(slideWidth) + getPx(blockWidth) / 2)
189
+ }
190
+ return '0px'
191
+ }
192
+ })
193
+
194
+ watch(
195
+ () => props.modelValue,
196
+ (newValue) => {
197
+ // 只有在非滑动状态时,才可以通过value更新滑块值,这里监听,是为了让用户触发
198
+ if (status.value === 'end') updateValue(newValue, false)
199
+ }
200
+ )
201
+
202
+ watch(
203
+ () => props.rangeValue,
204
+ (newValue) => {
205
+ if (status.value === 'end') {
206
+ updateValue(newValue[0], false, 0)
207
+ updateValue(newValue[1], false, 1)
208
+ }
209
+ },
210
+ { deep: true }
211
+ )
212
+
213
+ onMounted(async () => {
214
+ // 获取滑块条的尺寸信息
215
+ if (!props.useNative) {
216
+ // #ifndef APP-NVUE
217
+ sliderRect.value = (await getRect(
218
+ '.hy-slider__base',
219
+ false,
220
+ instance
221
+ )) as UniNamespace.NodeInfo
222
+ // console.log('sliderRect', sliderRect.value)
223
+ if (sliderRect.value.width == 0) {
224
+ error('如在弹窗等元素中使用,请使用v-if来显示滑块,否则无法计算长度。')
225
+ }
226
+ init()
227
+ // #endif
228
+ }
229
+ })
230
+
231
+ const init = () => {
232
+ if (props.isRange) {
233
+ updateValue(props.rangeValue[0], false, 0)
234
+ updateValue(props.rangeValue[1], false, 1)
235
+ } else {
236
+ updateValue(props.modelValue, false)
237
+ }
238
+ }
239
+
240
+ // native拖动过程中触发
241
+ const changingHandler = (e: SliderOnChangingEvent) => {
242
+ const { value } = e.detail
243
+ // 更新v-model的值
244
+ emit('update:modelValue', value)
245
+ // 触发事件
246
+ emit('changing', value)
247
+ }
248
+
249
+ // native滑动结束时触发
250
+ const changeHandler = (e: SliderOnChangingEvent) => {
251
+ const { value } = e.detail
252
+ // 更新v-model的值
253
+ emit('update:modelValue', value)
254
+ // 触发事件
255
+ emit('change', value)
256
+ }
257
+
258
+ const onTouchStart = (e: TouchEvent, index = 1) => {
259
+ if (props.disabled) return
260
+ startX.value = 0
261
+ // 触摸点集
262
+ let touches = e.touches[0]
263
+ // 触摸点到屏幕左边的距离
264
+ startX.value = touches.clientX
265
+ // 此处的this.modelValue虽为props值,但是通过$emit('update:modelValue')进行了修改
266
+ if (props.isRange) {
267
+ startValue0.value = format(props.rangeValue[0], 0)
268
+ startValue.value = format(props.rangeValue[1], 1)
269
+ } else {
270
+ startValue.value = format(props.modelValue)
271
+ }
272
+ // 标示当前的状态为开始触摸滑动
273
+ status.value = 'start'
274
+
275
+ let clientX = 0
276
+ // #ifndef APP-NVUE
277
+ clientX = touches.clientX
278
+ // #endif
279
+ // #ifdef APP-NVUE
280
+ clientX = touches.screenX
281
+ // #endif
282
+ distanceX.value = clientX - sliderRect.value.left!
283
+ // 获得移动距离对整个滑块的值,此为带有多位小数的值,不能用此更新视图
284
+ // 否则造成通信阻塞,需要每改变一个step值时修改一次视图
285
+ newValue.value =
286
+ (distanceX.value / sliderRect.value.width!) * (props.max - props.min) + props.min
287
+ status.value = 'moving'
288
+ // 发出moving事件
289
+ let $crtFmtValue = updateValue(newValue.value, true, index)
290
+ emit('changing', $crtFmtValue)
291
+ }
292
+ const onTouchMove = (e: TouchEvent, index = 1) => {
293
+ if (props.disabled) return
294
+ // 连续触摸的过程会一直触发本方法,但只有手指触发且移动了才被认为是拖动了,才发出事件
295
+ // 触摸后第一次移动已经将status设置为moving状态,故触摸第二次移动不会触发本事件
296
+ if (status.value == 'start') emit('start')
297
+ let touches = e.touches[0]
298
+ // console.log('touchs', touches)
299
+ // 滑块的左边不一定跟屏幕左边接壤,所以需要减去最外层父元素的左边值
300
+ let clientX = 0
301
+ // #ifndef APP-NVUE
302
+ clientX = touches.clientX
303
+ // #endif
304
+ // #ifdef APP-NVUE
305
+ clientX = touches.screenX
306
+ // #endif
307
+ distanceX.value = clientX - sliderRect.value.left!
308
+ // 获得移动距离对整个滑块的值,此为带有多位小数的值,不能用此更新视图
309
+ // 否则造成通信阻塞,需要每改变一个step值时修改一次视图
310
+ newValue.value =
311
+ (distanceX.value / sliderRect.value.width!) * (props.max - props.min) + props.min
312
+ status.value = 'moving'
313
+ // 发出moving事件
314
+ let $crtFmtValue = updateValue(newValue.value, true, index)
315
+ emit('changing', $crtFmtValue)
316
+ }
317
+ const onTouchEnd = (e: TouchEvent, index = 1) => {
318
+ if (props.disabled) return
319
+ if (status.value === 'moving') {
320
+ let $crtFmtValue = updateValue(newValue.value, false, index)
321
+ emit('change', $crtFmtValue)
322
+ }
323
+ status.value = 'end'
324
+ }
325
+ const onTouchStart2 = (e: TouchEvent, index = 1) => {
326
+ if (!props.isRange) {
327
+ // this.onChangeStart(event, index);
328
+ }
329
+ }
330
+ const onTouchMove2 = (e: TouchEvent, index = 1) => {
331
+ if (!props.isRange) {
332
+ // this.onTouchMove(event, index);
333
+ }
334
+ }
335
+ const onTouchEnd2 = (e: TouchEvent, index = 1) => {
336
+ if (!props.isRange) {
337
+ // this.onTouchEnd(event, index);
338
+ }
339
+ }
340
+ const onClick = (e: TouchEvent) => {
341
+ if (props.disabled) return
342
+ // 直接点击滑块的情况,计算方式与onTouchMove方法相同
343
+ // #ifndef APP-NVUE
344
+
345
+ let x
346
+ // #ifdef MP-ALIPAY
347
+ x = e.detail.clientX
348
+ // #endif
349
+ // #ifndef MP-ALIPAY
350
+ x = e.detail.x
351
+ // #endif
352
+
353
+ const clientX = x - sliderRect.value.left!
354
+ newValue.value = (clientX / sliderRect.value.width!) * (props.max - props.min) + props.min
355
+ updateValue(newValue.value, false, 1)
356
+ // #endif
357
+ }
358
+ const updateValue = (value: number, drag: boolean, index: number = 1): number | number[] => {
359
+ // 去掉小数部分,同时也是对step步进的处理
360
+ let valueFormat = format(value, index)
361
+ // 不允许滑动的值超过max最大值
362
+ if (valueFormat > props.max) {
363
+ valueFormat = props.max
364
+ }
365
+ // 设置移动的距离,不能用百分比,因为NVUE不支持。
366
+ const width = Math.min(
367
+ ((valueFormat - props.min) / (props.max - props.min)) * sliderRect.value.width!,
368
+ sliderRect.value.width!
369
+ )
370
+ const barStyle_1: CSSProperties = {
371
+ width: width + 'px'
372
+ }
373
+ // 移动期间无需过渡动画
374
+ if (drag) {
375
+ barStyle_1.transition = 'none'
376
+ } else {
377
+ // 非移动期间,删掉对过渡为空的声明,让css中的声明起效
378
+ delete barStyle_1.transition
379
+ }
380
+ // 修改value值
381
+ if (props.isRange) {
382
+ props.rangeValue[index] = valueFormat
383
+ emit('update:modelValue', props.rangeValue)
384
+ } else {
385
+ emit('update:modelValue', valueFormat)
386
+ }
387
+
388
+ switch (index) {
389
+ case 0:
390
+ barStyle0.value = barStyle_1
391
+ break
392
+ case 1:
393
+ barStyle.value = barStyle_1
394
+ break
395
+ default:
396
+ break
397
+ }
398
+ if (props.isRange) {
399
+ return props.rangeValue
400
+ } else {
401
+ return valueFormat
402
+ }
403
+ }
404
+ const format = (value: number, index = 1): number => {
405
+ // 将小数变成整数,为了减少对视图的更新,造成视图层与逻辑层的阻塞
406
+ if (props.isRange) {
407
+ switch (index) {
408
+ case 0:
409
+ return (
410
+ Math.round(
411
+ Math.max(
412
+ props.min,
413
+ Math.min(value, props.rangeValue[1] - props.step, props.max)
414
+ ) / props.step
415
+ ) * props.step
416
+ )
417
+ case 1:
418
+ return (
419
+ Math.round(
420
+ Math.max(
421
+ props.min,
422
+ props.rangeValue[0] + props.step,
423
+ Math.min(value, props.max)
424
+ ) / props.step
425
+ ) * props.step
426
+ )
427
+ default:
428
+ return 0
429
+ }
430
+ } else {
431
+ // 解决精度丢失
432
+ return (
433
+ (Math.round(Math.max(props.min, Math.min(value, props.max)) / props.step) *
434
+ 1000 *
435
+ props.step) /
436
+ 1000
437
+ )
438
+ }
439
+ }
440
+ </script>
441
+
442
+ <style lang="scss" scoped>
443
+ @import './index.scss';
444
+ </style>