uview-pro 0.3.0 → 0.3.1

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 (249) hide show
  1. package/changelog.md +584 -574
  2. package/components/common/props.ts +22 -22
  3. package/components/u-action-sheet/types.ts +37 -37
  4. package/components/u-action-sheet/u-action-sheet.vue +178 -178
  5. package/components/u-alert-tips/types.ts +41 -41
  6. package/components/u-alert-tips/u-alert-tips.vue +238 -238
  7. package/components/u-avatar/types.ts +36 -36
  8. package/components/u-avatar/u-avatar.vue +217 -217
  9. package/components/u-avatar-cropper/types.ts +23 -23
  10. package/components/u-avatar-cropper/u-avatar-cropper.vue +297 -297
  11. package/components/u-avatar-cropper/weCropper.d.ts +62 -62
  12. package/components/u-avatar-cropper/weCropper.js +1281 -1281
  13. package/components/u-avatar-cropper/weCropper.ts +1276 -1276
  14. package/components/u-back-top/types.ts +36 -36
  15. package/components/u-back-top/u-back-top.vue +140 -140
  16. package/components/u-badge/types.ts +38 -38
  17. package/components/u-badge/u-badge.vue +183 -183
  18. package/components/u-button/types.ts +66 -66
  19. package/components/u-button/u-button.vue +579 -579
  20. package/components/u-calendar/types.ts +75 -75
  21. package/components/u-calendar/u-calendar.vue +793 -793
  22. package/components/u-car-keyboard/types.ts +14 -14
  23. package/components/u-car-keyboard/u-car-keyboard.vue +262 -262
  24. package/components/u-card/types.ts +61 -61
  25. package/components/u-card/u-card.vue +209 -209
  26. package/components/u-cell-group/types.ts +19 -19
  27. package/components/u-cell-group/u-cell-group.vue +60 -60
  28. package/components/u-cell-item/types.ts +56 -56
  29. package/components/u-cell-item/u-cell-item.vue +226 -226
  30. package/components/u-checkbox/types.ts +33 -33
  31. package/components/u-checkbox/u-checkbox.vue +282 -282
  32. package/components/u-checkbox-group/types.ts +34 -34
  33. package/components/u-checkbox-group/u-checkbox-group.vue +130 -130
  34. package/components/u-circle-progress/types.ts +54 -54
  35. package/components/u-circle-progress/u-circle-progress.vue +206 -206
  36. package/components/u-city-select/types.ts +22 -22
  37. package/components/u-city-select/u-city-select.vue +276 -276
  38. package/components/u-col/types.ts +32 -32
  39. package/components/u-col/u-col.vue +142 -142
  40. package/components/u-collapse/types.ts +33 -33
  41. package/components/u-collapse/u-collapse.vue +190 -190
  42. package/components/u-collapse-item/types.ts +27 -27
  43. package/components/u-collapse-item/u-collapse-item.vue +290 -290
  44. package/components/u-column-notice/types.ts +50 -50
  45. package/components/u-column-notice/u-column-notice.vue +222 -222
  46. package/components/u-count-down/types.ts +44 -44
  47. package/components/u-count-down/u-count-down.vue +286 -286
  48. package/components/u-count-to/types.ts +34 -34
  49. package/components/u-count-to/u-count-to.vue +266 -266
  50. package/components/u-divider/types.ts +33 -33
  51. package/components/u-divider/u-divider.vue +145 -145
  52. package/components/u-dropdown/types.ts +34 -34
  53. package/components/u-dropdown/u-dropdown.vue +330 -330
  54. package/components/u-dropdown-item/types.ts +29 -29
  55. package/components/u-dropdown-item/u-dropdown-item.vue +120 -120
  56. package/components/u-empty/types.ts +38 -38
  57. package/components/u-empty/u-empty.vue +103 -103
  58. package/components/u-field/types.ts +71 -71
  59. package/components/u-field/u-field.vue +388 -388
  60. package/components/u-form/types.ts +29 -29
  61. package/components/u-form/u-form.vue +130 -130
  62. package/components/u-form-item/types.ts +72 -72
  63. package/components/u-form-item/u-form-item.vue +447 -447
  64. package/components/u-full-screen/types.ts +16 -16
  65. package/components/u-full-screen/u-full-screen.vue +103 -103
  66. package/components/u-gap/types.ts +20 -20
  67. package/components/u-gap/u-gap.vue +50 -50
  68. package/components/u-grid/types.ts +21 -21
  69. package/components/u-grid/u-grid.vue +91 -91
  70. package/components/u-grid-item/types.ts +16 -16
  71. package/components/u-grid-item/u-grid-item.vue +130 -130
  72. package/components/u-icon/types.ts +61 -61
  73. package/components/u-icon/u-icon.vue +296 -296
  74. package/components/u-image/types.ts +51 -51
  75. package/components/u-image/u-image.vue +239 -239
  76. package/components/u-index-anchor/types.ts +16 -16
  77. package/components/u-index-anchor/u-index-anchor.vue +94 -94
  78. package/components/u-index-list/types.ts +43 -43
  79. package/components/u-index-list/u-index-list.vue +352 -352
  80. package/components/u-input/types.ts +137 -137
  81. package/components/u-input/u-input.vue +288 -288
  82. package/components/u-keyboard/types.ts +40 -40
  83. package/components/u-keyboard/u-keyboard.vue +178 -178
  84. package/components/u-lazy-load/types.ts +37 -37
  85. package/components/u-lazy-load/u-lazy-load.vue +246 -246
  86. package/components/u-line/types.ts +44 -44
  87. package/components/u-line/u-line.vue +68 -68
  88. package/components/u-line-progress/types.ts +58 -58
  89. package/components/u-line-progress/u-line-progress.vue +126 -126
  90. package/components/u-link/types.ts +43 -43
  91. package/components/u-link/u-link.vue +84 -84
  92. package/components/u-loading/types.ts +35 -35
  93. package/components/u-loading/u-loading.vue +105 -105
  94. package/components/u-loading-popup/types.ts +26 -26
  95. package/components/u-loading-popup/u-loading-popup.vue +253 -253
  96. package/components/u-loadmore/types.ts +79 -79
  97. package/components/u-loadmore/u-loadmore.vue +156 -156
  98. package/components/u-mask/types.ts +40 -40
  99. package/components/u-mask/u-mask.vue +113 -113
  100. package/components/u-message-input/types.ts +74 -74
  101. package/components/u-message-input/u-message-input.vue +281 -281
  102. package/components/u-modal/types.ts +118 -118
  103. package/components/u-modal/u-modal.vue +220 -220
  104. package/components/u-navbar/types.ts +103 -103
  105. package/components/u-navbar/u-navbar.vue +251 -251
  106. package/components/u-no-network/image.ts +2 -2
  107. package/components/u-no-network/types.ts +28 -28
  108. package/components/u-no-network/u-no-network.vue +303 -303
  109. package/components/u-notice-bar/types.ts +111 -111
  110. package/components/u-notice-bar/u-notice-bar.vue +189 -189
  111. package/components/u-number-box/types.ts +42 -42
  112. package/components/u-number-box/u-number-box.vue +321 -321
  113. package/components/u-number-keyboard/types.ts +26 -26
  114. package/components/u-number-keyboard/u-number-keyboard.vue +188 -188
  115. package/components/u-picker/types.ts +123 -123
  116. package/components/u-picker/u-picker.vue +685 -685
  117. package/components/u-popup/types.ts +59 -59
  118. package/components/u-popup/u-popup.vue +385 -385
  119. package/components/u-radio/types.ts +27 -27
  120. package/components/u-radio/u-radio.vue +279 -279
  121. package/components/u-radio-group/types.ts +31 -31
  122. package/components/u-radio-group/u-radio-group.vue +96 -96
  123. package/components/u-rate/types.ts +42 -42
  124. package/components/u-rate/u-rate.vue +249 -249
  125. package/components/u-read-more/types.ts +37 -37
  126. package/components/u-read-more/u-read-more.vue +172 -172
  127. package/components/u-root-portal/u-root-portal.vue +56 -56
  128. package/components/u-row/types.ts +22 -22
  129. package/components/u-row/u-row.vue +105 -105
  130. package/components/u-row-notice/types.ts +41 -41
  131. package/components/u-row-notice/u-row-notice.vue +256 -256
  132. package/components/u-safe-bottom/u-safe-bottom.vue +57 -57
  133. package/components/u-search/types.ts +55 -55
  134. package/components/u-search/u-search.vue +279 -279
  135. package/components/u-section/types.ts +34 -34
  136. package/components/u-section/u-section.vue +150 -150
  137. package/components/u-select/types.ts +45 -45
  138. package/components/u-select/u-select.vue +388 -388
  139. package/components/u-skeleton/types.ts +22 -22
  140. package/components/u-skeleton/u-skeleton.vue +231 -231
  141. package/components/u-slider/types.ts +34 -34
  142. package/components/u-slider/u-slider.vue +255 -255
  143. package/components/u-status-bar/u-status-bar.vue +74 -74
  144. package/components/u-steps/types.ts +30 -30
  145. package/components/u-steps/u-steps.vue +181 -181
  146. package/components/u-sticky/types.ts +24 -24
  147. package/components/u-sticky/u-sticky.vue +178 -178
  148. package/components/u-subsection/types.ts +38 -38
  149. package/components/u-subsection/u-subsection.vue +339 -339
  150. package/components/u-swipe-action/types.ts +52 -52
  151. package/components/u-swipe-action/u-swipe-action.vue +276 -276
  152. package/components/u-swiper/types.ts +49 -49
  153. package/components/u-swiper/u-swiper.vue +308 -308
  154. package/components/u-switch/types.ts +30 -30
  155. package/components/u-switch/u-switch.vue +150 -150
  156. package/components/u-tabbar/types.ts +38 -38
  157. package/components/u-tabbar/u-tabbar.vue +315 -315
  158. package/components/u-table/types.ts +27 -27
  159. package/components/u-table/u-table.vue +67 -67
  160. package/components/u-tabs/types.ts +53 -53
  161. package/components/u-tabs/u-tabs.vue +302 -302
  162. package/components/u-tabs-swiper/types.ts +55 -55
  163. package/components/u-tabs-swiper/u-tabs-swiper.vue +409 -409
  164. package/components/u-tag/types.ts +39 -39
  165. package/components/u-tag/u-tag.vue +268 -268
  166. package/components/u-td/types.ts +14 -14
  167. package/components/u-td/u-td.vue +98 -98
  168. package/components/u-text/types.ts +72 -72
  169. package/components/u-text/u-text.vue +343 -343
  170. package/components/u-th/types.ts +14 -14
  171. package/components/u-th/u-th.vue +92 -92
  172. package/components/u-time-line/u-time-line.vue +53 -53
  173. package/components/u-time-line-item/types.ts +16 -16
  174. package/components/u-time-line-item/u-time-line-item.vue +90 -90
  175. package/components/u-toast/types.ts +38 -38
  176. package/components/u-toast/u-toast.vue +240 -240
  177. package/components/u-top-tips/types.ts +16 -16
  178. package/components/u-top-tips/u-top-tips.vue +130 -130
  179. package/components/u-tr/types.ts +11 -11
  180. package/components/u-tr/u-tr.vue +39 -39
  181. package/components/u-upload/types.ts +82 -82
  182. package/components/u-upload/u-upload.vue +568 -568
  183. package/components/u-verification-code/types.ts +24 -24
  184. package/components/u-verification-code/u-verification-code.vue +176 -176
  185. package/components/u-waterfall/types.ts +18 -18
  186. package/components/u-waterfall/u-waterfall.vue +187 -187
  187. package/iconfont.css +913 -913
  188. package/index.scss +25 -25
  189. package/index.ts +38 -38
  190. package/libs/config/config.ts +26 -26
  191. package/libs/config/zIndex.ts +37 -37
  192. package/libs/css/color.scss +155 -155
  193. package/libs/css/common.scss +178 -178
  194. package/libs/css/style.components.scss +16 -16
  195. package/libs/css/style.h5.scss +8 -8
  196. package/libs/css/style.mp.scss +72 -72
  197. package/libs/css/style.nvue.scss +15 -15
  198. package/libs/css/style.vue.scss +188 -188
  199. package/libs/function/$parent.ts +24 -24
  200. package/libs/function/addUnit.ts +13 -13
  201. package/libs/function/color.ts +37 -37
  202. package/libs/function/colorGradient.ts +139 -139
  203. package/libs/function/debounce.ts +28 -28
  204. package/libs/function/deepClone.ts +39 -39
  205. package/libs/function/deepMerge.ts +35 -35
  206. package/libs/function/getParent.ts +63 -63
  207. package/libs/function/getRect.ts +26 -26
  208. package/libs/function/guid.ts +42 -42
  209. package/libs/function/md5.ts +403 -403
  210. package/libs/function/parent.ts +21 -21
  211. package/libs/function/queryParams.ts +64 -64
  212. package/libs/function/random.ts +16 -16
  213. package/libs/function/randomArray.ts +11 -11
  214. package/libs/function/route.ts +118 -118
  215. package/libs/function/styleUtils.ts +83 -83
  216. package/libs/function/sys.ts +15 -15
  217. package/libs/function/test.ts +289 -289
  218. package/libs/function/throttle.ts +31 -31
  219. package/libs/function/timeFormat.ts +55 -55
  220. package/libs/function/timeFrom.ts +48 -48
  221. package/libs/function/toast.ts +14 -14
  222. package/libs/function/trim.ts +21 -21
  223. package/libs/function/type2icon.ts +39 -39
  224. package/libs/hooks/index.ts +4 -4
  225. package/libs/hooks/useCompRelation.ts +364 -364
  226. package/libs/hooks/useComponent.ts +759 -759
  227. package/libs/hooks/useEmitter.ts +79 -79
  228. package/libs/hooks/useParent.ts +33 -33
  229. package/libs/hooks/useRect.ts +33 -33
  230. package/libs/index.ts +337 -337
  231. package/libs/request/auto-http.ts +76 -76
  232. package/libs/request/index.ts +242 -242
  233. package/libs/store/index.ts +88 -88
  234. package/libs/util/async-validator.d.ts +75 -75
  235. package/libs/util/async-validator.js +1 -1
  236. package/libs/util/calendar.d.ts +57 -57
  237. package/libs/util/emitter.ts +112 -112
  238. package/libs/util/eventBus.ts +86 -86
  239. package/libs/util/logger.ts +364 -364
  240. package/libs/util/mitt.ts +118 -118
  241. package/libs/util/parent.ts +20 -20
  242. package/package.json +4 -4
  243. package/readme.md +241 -241
  244. package/theme.scss +38 -38
  245. package/types/components.d.ts +97 -97
  246. package/types/global.d.ts +331 -331
  247. package/types/ignore-errors.d.ts +30 -30
  248. package/types/index.d.ts +19 -19
  249. package/types/uni-app.d.ts +63 -63
@@ -1,178 +1,178 @@
1
- <template>
2
- <view>
3
- <view
4
- class="u-sticky-wrap"
5
- :class="[elClass, customClass]"
6
- :style="
7
- $u.toStyle(
8
- {
9
- height: fixed ? height + 'px' : 'auto',
10
- backgroundColor: bgColor
11
- },
12
- customStyle
13
- )
14
- "
15
- >
16
- <view
17
- class="u-sticky"
18
- :style="{
19
- position: fixed ? 'fixed' : 'static',
20
- top: stickyTop + 'px',
21
- left: left + 'px',
22
- width: width == 'auto' ? 'auto' : width + 'px',
23
- zIndex: uZIndex
24
- }"
25
- >
26
- <slot></slot>
27
- </view>
28
- </view>
29
- </view>
30
- </template>
31
-
32
- <script lang="ts">
33
- export default {
34
- name: 'u-sticky',
35
- options: {
36
- addGlobalClass: true,
37
- // #ifndef MP-TOUTIAO
38
- virtualHost: true,
39
- // #endif
40
- styleIsolation: 'shared'
41
- }
42
- };
43
- </script>
44
-
45
- <script setup lang="ts">
46
- import { ref, computed, watch, nextTick, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue';
47
- import { $u } from '../..';
48
- import { StickyProps } from './types';
49
-
50
- /**
51
- * sticky 吸顶
52
- * @description 该组件与CSS中position: sticky属性实现的效果一致,当组件达到预设的到顶部距离时, 就会固定在指定位置,组件位置大于预设的顶部距离时,会重新按照正常的布局排列。
53
- * @tutorial https://uviewpro.cn/zh/components/sticky.html
54
- * @property {String|Number} offsetTop 吸顶时与顶部的距离,单位rpx(默认0)
55
- * @property {String|Number} index 自定义标识,用于区分是哪一个组件
56
- * @property {Boolean} enable 是否开启吸顶功能(默认true)
57
- * @property {String} bgColor 组件背景颜色(默认#ffffff)
58
- * @property {String|Number} zIndex 吸顶时的z-index值(默认970)
59
- * @property {String|Number} h5NavHeight 导航栏高度,自定义导航栏时(无导航栏时需设置为0),需要传入此值,单位px(默认44)
60
- * @event fixed 组件吸顶时触发
61
- * @event unfixed 组件取消吸顶时触发
62
- * @example <u-sticky offset-top="200"><view>塞下秋来风景异,衡阳雁去无留意</view></u-sticky>
63
- */
64
- const props = defineProps(StickyProps);
65
-
66
- const emit = defineEmits(['fixed', 'unfixed']);
67
-
68
- const instance = getCurrentInstance();
69
- const fixed = ref(false);
70
- const height = ref<'auto' | number>('auto');
71
- const stickyTop = ref(0);
72
- const elClass = ref('');
73
- const left = ref(0);
74
- const width = ref<'auto' | number>('auto');
75
- let contentObserver: any = null;
76
-
77
- elClass.value = $u.guid();
78
-
79
- const uZIndex = computed(() => (props.zIndex ? props.zIndex : ($u?.zIndex?.sticky ?? 970)));
80
-
81
- watch(
82
- () => props.offsetTop,
83
- () => {
84
- initObserver();
85
- }
86
- );
87
-
88
- watch(
89
- () => props.enable,
90
- val => {
91
- if (val == false) {
92
- fixed.value = false;
93
- disconnectObserver('contentObserver');
94
- } else {
95
- initObserver();
96
- }
97
- }
98
- );
99
-
100
- onMounted(() => {
101
- initObserver();
102
- });
103
-
104
- onBeforeUnmount(() => {
105
- disconnectObserver('contentObserver');
106
- });
107
-
108
- /**
109
- * 初始化 IntersectionObserver 监听
110
- */
111
- function initObserver() {
112
- if (!props.enable) return;
113
- // #ifdef H5
114
- stickyTop.value =
115
- Number(props.offsetTop) !== 0
116
- ? uni.upx2px(Number(props.offsetTop)) + Number(props.h5NavHeight)
117
- : Number(props.h5NavHeight);
118
- // #endif
119
- // #ifndef H5
120
- stickyTop.value = Number(props.offsetTop) !== 0 ? uni.upx2px(Number(props.offsetTop)) : 0;
121
- // #endif
122
- console.log('stickyTop.value', stickyTop.value);
123
- disconnectObserver('contentObserver');
124
- $u.getRect('.' + elClass.value, instance).then((res: any) => {
125
- height.value = res.height;
126
- left.value = res.left;
127
- width.value = res.width;
128
- nextTick(() => {
129
- observeContent();
130
- });
131
- });
132
- }
133
-
134
- /**
135
- * 创建 IntersectionObserver 监听内容区域
136
- */
137
- function observeContent() {
138
- disconnectObserver('contentObserver');
139
-
140
- contentObserver = uni.createIntersectionObserver(instance?.proxy, {
141
- thresholds: [0.95, 0.98, 1]
142
- });
143
- contentObserver.relativeToViewport({
144
- top: -stickyTop.value
145
- });
146
- contentObserver.observe('.' + elClass.value, (res: any) => {
147
- if (!props.enable) return;
148
- setFixed(res.boundingClientRect.top);
149
- });
150
- }
151
-
152
- /**
153
- * 设置 fixed 状态
154
- */
155
- function setFixed(top: number) {
156
- const isFixed = top < stickyTop.value;
157
- if (isFixed) emit('fixed', props.index);
158
- else if (fixed.value) emit('unfixed', props.index);
159
- fixed.value = isFixed;
160
- }
161
-
162
- /**
163
- * 断开 observer
164
- */
165
- function disconnectObserver(observerName: string) {
166
- if (observerName === 'contentObserver' && contentObserver) {
167
- contentObserver.disconnect();
168
- contentObserver = null;
169
- }
170
- }
171
- </script>
172
-
173
- <style scoped lang="scss">
174
- @import '../../libs/css/style.components.scss';
175
- .u-sticky {
176
- z-index: 9999999999;
177
- }
178
- </style>
1
+ <template>
2
+ <view>
3
+ <view
4
+ class="u-sticky-wrap"
5
+ :class="[elClass, customClass]"
6
+ :style="
7
+ $u.toStyle(
8
+ {
9
+ height: fixed ? height + 'px' : 'auto',
10
+ backgroundColor: bgColor
11
+ },
12
+ customStyle
13
+ )
14
+ "
15
+ >
16
+ <view
17
+ class="u-sticky"
18
+ :style="{
19
+ position: fixed ? 'fixed' : 'static',
20
+ top: stickyTop + 'px',
21
+ left: left + 'px',
22
+ width: width == 'auto' ? 'auto' : width + 'px',
23
+ zIndex: uZIndex
24
+ }"
25
+ >
26
+ <slot></slot>
27
+ </view>
28
+ </view>
29
+ </view>
30
+ </template>
31
+
32
+ <script lang="ts">
33
+ export default {
34
+ name: 'u-sticky',
35
+ options: {
36
+ addGlobalClass: true,
37
+ // #ifndef MP-TOUTIAO
38
+ virtualHost: true,
39
+ // #endif
40
+ styleIsolation: 'shared'
41
+ }
42
+ };
43
+ </script>
44
+
45
+ <script setup lang="ts">
46
+ import { ref, computed, watch, nextTick, onMounted, onBeforeUnmount, getCurrentInstance } from 'vue';
47
+ import { $u } from '../..';
48
+ import { StickyProps } from './types';
49
+
50
+ /**
51
+ * sticky 吸顶
52
+ * @description 该组件与CSS中position: sticky属性实现的效果一致,当组件达到预设的到顶部距离时, 就会固定在指定位置,组件位置大于预设的顶部距离时,会重新按照正常的布局排列。
53
+ * @tutorial https://uviewpro.cn/zh/components/sticky.html
54
+ * @property {String|Number} offsetTop 吸顶时与顶部的距离,单位rpx(默认0)
55
+ * @property {String|Number} index 自定义标识,用于区分是哪一个组件
56
+ * @property {Boolean} enable 是否开启吸顶功能(默认true)
57
+ * @property {String} bgColor 组件背景颜色(默认#ffffff)
58
+ * @property {String|Number} zIndex 吸顶时的z-index值(默认970)
59
+ * @property {String|Number} h5NavHeight 导航栏高度,自定义导航栏时(无导航栏时需设置为0),需要传入此值,单位px(默认44)
60
+ * @event fixed 组件吸顶时触发
61
+ * @event unfixed 组件取消吸顶时触发
62
+ * @example <u-sticky offset-top="200"><view>塞下秋来风景异,衡阳雁去无留意</view></u-sticky>
63
+ */
64
+ const props = defineProps(StickyProps);
65
+
66
+ const emit = defineEmits(['fixed', 'unfixed']);
67
+
68
+ const instance = getCurrentInstance();
69
+ const fixed = ref(false);
70
+ const height = ref<'auto' | number>('auto');
71
+ const stickyTop = ref(0);
72
+ const elClass = ref('');
73
+ const left = ref(0);
74
+ const width = ref<'auto' | number>('auto');
75
+ let contentObserver: any = null;
76
+
77
+ elClass.value = $u.guid();
78
+
79
+ const uZIndex = computed(() => (props.zIndex ? props.zIndex : ($u?.zIndex?.sticky ?? 970)));
80
+
81
+ watch(
82
+ () => props.offsetTop,
83
+ () => {
84
+ initObserver();
85
+ }
86
+ );
87
+
88
+ watch(
89
+ () => props.enable,
90
+ val => {
91
+ if (val == false) {
92
+ fixed.value = false;
93
+ disconnectObserver('contentObserver');
94
+ } else {
95
+ initObserver();
96
+ }
97
+ }
98
+ );
99
+
100
+ onMounted(() => {
101
+ initObserver();
102
+ });
103
+
104
+ onBeforeUnmount(() => {
105
+ disconnectObserver('contentObserver');
106
+ });
107
+
108
+ /**
109
+ * 初始化 IntersectionObserver 监听
110
+ */
111
+ function initObserver() {
112
+ if (!props.enable) return;
113
+ // #ifdef H5
114
+ stickyTop.value =
115
+ Number(props.offsetTop) !== 0
116
+ ? uni.upx2px(Number(props.offsetTop)) + Number(props.h5NavHeight)
117
+ : Number(props.h5NavHeight);
118
+ // #endif
119
+ // #ifndef H5
120
+ stickyTop.value = Number(props.offsetTop) !== 0 ? uni.upx2px(Number(props.offsetTop)) : 0;
121
+ // #endif
122
+ console.log('stickyTop.value', stickyTop.value);
123
+ disconnectObserver('contentObserver');
124
+ $u.getRect('.' + elClass.value, instance).then((res: any) => {
125
+ height.value = res.height;
126
+ left.value = res.left;
127
+ width.value = res.width;
128
+ nextTick(() => {
129
+ observeContent();
130
+ });
131
+ });
132
+ }
133
+
134
+ /**
135
+ * 创建 IntersectionObserver 监听内容区域
136
+ */
137
+ function observeContent() {
138
+ disconnectObserver('contentObserver');
139
+
140
+ contentObserver = uni.createIntersectionObserver(instance?.proxy, {
141
+ thresholds: [0.95, 0.98, 1]
142
+ });
143
+ contentObserver.relativeToViewport({
144
+ top: -stickyTop.value
145
+ });
146
+ contentObserver.observe('.' + elClass.value, (res: any) => {
147
+ if (!props.enable) return;
148
+ setFixed(res.boundingClientRect.top);
149
+ });
150
+ }
151
+
152
+ /**
153
+ * 设置 fixed 状态
154
+ */
155
+ function setFixed(top: number) {
156
+ const isFixed = top < stickyTop.value;
157
+ if (isFixed) emit('fixed', props.index);
158
+ else if (fixed.value) emit('unfixed', props.index);
159
+ fixed.value = isFixed;
160
+ }
161
+
162
+ /**
163
+ * 断开 observer
164
+ */
165
+ function disconnectObserver(observerName: string) {
166
+ if (observerName === 'contentObserver' && contentObserver) {
167
+ contentObserver.disconnect();
168
+ contentObserver = null;
169
+ }
170
+ }
171
+ </script>
172
+
173
+ <style scoped lang="scss">
174
+ @import '../../libs/css/style.components.scss';
175
+ .u-sticky {
176
+ z-index: 9999999999;
177
+ }
178
+ </style>
@@ -1,38 +1,38 @@
1
- import type { ExtractPropTypes, PropType } from 'vue';
2
- import type { SubsectionListItem, SubsectionMode } from '../../types/global';
3
- import { baseProps } from '../common/props';
4
-
5
- /**
6
- * SubsectionProps 分段器 props 类型定义
7
- * @description 分段器,支持按钮/分段模式、动画、颜色等
8
- */
9
-
10
- export const SubsectionProps = {
11
- ...baseProps,
12
- /** tab的数据 */
13
- list: { type: Array as PropType<Array<string | SubsectionListItem>>, default: () => [] },
14
- /** 当前活动的tab的index */
15
- current: { type: [Number, String] as PropType<number | string>, default: 0 },
16
- /** 激活的颜色 */
17
- activeColor: { type: String, default: '#303133' },
18
- /** 未激活的颜色 */
19
- inactiveColor: { type: String, default: '#606266' },
20
- /** 模式选择,mode=button为按钮形式,mode=subsection时为分段模式 */
21
- mode: { type: String as PropType<SubsectionMode>, default: 'button' },
22
- /** 字体大小,单位rpx */
23
- fontSize: { type: [Number, String] as PropType<number | string>, default: 28 },
24
- /** 是否开启动画效果 */
25
- animation: { type: Boolean, default: true },
26
- /** 组件的高度,单位rpx */
27
- height: { type: [Number, String] as PropType<number | string>, default: 70 },
28
- /** 激活tab的字体是否加粗 */
29
- bold: { type: Boolean, default: true },
30
- /** mode=button时,组件背景颜色 */
31
- bgColor: { type: String, default: '#eeeeef' },
32
- /** mode = button时,滑块背景颜色 */
33
- buttonColor: { type: String, default: '#ffffff' },
34
- /** 在切换分段器的时候,是否让设备震一下 */
35
- vibrateShort: { type: Boolean, default: false }
36
- };
37
-
38
- export type SubsectionProps = ExtractPropTypes<typeof SubsectionProps>;
1
+ import type { ExtractPropTypes, PropType } from 'vue';
2
+ import type { SubsectionListItem, SubsectionMode } from '../../types/global';
3
+ import { baseProps } from '../common/props';
4
+
5
+ /**
6
+ * SubsectionProps 分段器 props 类型定义
7
+ * @description 分段器,支持按钮/分段模式、动画、颜色等
8
+ */
9
+
10
+ export const SubsectionProps = {
11
+ ...baseProps,
12
+ /** tab的数据 */
13
+ list: { type: Array as PropType<Array<string | SubsectionListItem>>, default: () => [] },
14
+ /** 当前活动的tab的index */
15
+ current: { type: [Number, String] as PropType<number | string>, default: 0 },
16
+ /** 激活的颜色 */
17
+ activeColor: { type: String, default: '#303133' },
18
+ /** 未激活的颜色 */
19
+ inactiveColor: { type: String, default: '#606266' },
20
+ /** 模式选择,mode=button为按钮形式,mode=subsection时为分段模式 */
21
+ mode: { type: String as PropType<SubsectionMode>, default: 'button' },
22
+ /** 字体大小,单位rpx */
23
+ fontSize: { type: [Number, String] as PropType<number | string>, default: 28 },
24
+ /** 是否开启动画效果 */
25
+ animation: { type: Boolean, default: true },
26
+ /** 组件的高度,单位rpx */
27
+ height: { type: [Number, String] as PropType<number | string>, default: 70 },
28
+ /** 激活tab的字体是否加粗 */
29
+ bold: { type: Boolean, default: true },
30
+ /** mode=button时,组件背景颜色 */
31
+ bgColor: { type: String, default: '#eeeeef' },
32
+ /** mode = button时,滑块背景颜色 */
33
+ buttonColor: { type: String, default: '#ffffff' },
34
+ /** 在切换分段器的时候,是否让设备震一下 */
35
+ vibrateShort: { type: Boolean, default: false }
36
+ };
37
+
38
+ export type SubsectionProps = ExtractPropTypes<typeof SubsectionProps>;