@tdesign/uniapp 0.7.3 → 0.8.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 (197) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +1 -1
  3. package/dist/action-sheet/README.md +1 -1
  4. package/dist/action-sheet/action-sheet.vue +158 -150
  5. package/dist/action-sheet/props.ts +2 -2
  6. package/dist/action-sheet/type.ts +1 -1
  7. package/dist/avatar/avatar.vue +89 -87
  8. package/dist/avatar-group/avatar-group.vue +69 -67
  9. package/dist/back-top/back-top.vue +60 -58
  10. package/dist/badge/badge.vue +69 -59
  11. package/dist/button/button.vue +121 -116
  12. package/dist/button/props.ts +2 -2
  13. package/dist/button/type.ts +1 -1
  14. package/dist/calendar/calendar-header.vue +4 -4
  15. package/dist/calendar/calendar.vue +308 -297
  16. package/dist/calendar/template.vue +1 -1
  17. package/dist/cascader/README.en-US.md +2 -1
  18. package/dist/cascader/README.md +2 -1
  19. package/dist/cascader/cascader.vue +340 -328
  20. package/dist/cascader/props.ts +6 -1
  21. package/dist/cascader/type.ts +6 -0
  22. package/dist/cell/cell.vue +127 -121
  23. package/dist/cell-group/cell-group.vue +32 -30
  24. package/dist/check-tag/check-tag.vue +73 -71
  25. package/dist/checkbox/checkbox.vue +127 -127
  26. package/dist/checkbox/props.ts +6 -6
  27. package/dist/checkbox/type.ts +3 -3
  28. package/dist/checkbox-group/checkbox-group.vue +175 -173
  29. package/dist/checkbox-group/props.ts +6 -6
  30. package/dist/checkbox-group/type.ts +4 -4
  31. package/dist/col/col.vue +26 -24
  32. package/dist/collapse/collapse.vue +83 -81
  33. package/dist/collapse-panel/collapse-panel.vue +121 -119
  34. package/dist/collapse-panel/props.ts +4 -4
  35. package/dist/collapse-panel/type.ts +2 -2
  36. package/dist/color-picker/README.md +1 -1
  37. package/dist/color-picker/color-picker.vue +324 -322
  38. package/dist/color-picker/props.ts +2 -2
  39. package/dist/color-picker/template.vue +14 -10
  40. package/dist/common/common.ts +1 -0
  41. package/dist/common/style/theme/index.css +5 -5
  42. package/dist/common/utils.js +7 -2
  43. package/dist/common/validator.js +172 -0
  44. package/dist/config-provider/README.en-US.md +184 -0
  45. package/dist/config-provider/README.md +234 -0
  46. package/dist/config-provider/config-provider.vue +105 -0
  47. package/dist/config-provider/config-store.js +70 -0
  48. package/dist/config-provider/props.ts +16 -0
  49. package/dist/config-provider/reactive-state.js +39 -0
  50. package/dist/config-provider/type.ts +401 -0
  51. package/dist/config-provider/use-config.js +29 -0
  52. package/dist/config-provider/utils.js +29 -0
  53. package/dist/count-down/count-down.vue +98 -97
  54. package/dist/date-time-picker/date-time-picker.vue +410 -395
  55. package/dist/demo/demo.vue +1 -0
  56. package/dist/dialog/dialog.vue +175 -173
  57. package/dist/divider/divider.vue +38 -36
  58. package/dist/draggable/draggable.vue +60 -58
  59. package/dist/drawer/README.md +1 -1
  60. package/dist/drawer/drawer.vue +48 -46
  61. package/dist/dropdown-item/dropdown-item.vue +209 -207
  62. package/dist/dropdown-item/props.ts +4 -4
  63. package/dist/dropdown-item/type.ts +3 -3
  64. package/dist/dropdown-menu/dropdown-menu.vue +93 -99
  65. package/dist/empty/empty.vue +43 -42
  66. package/dist/fab/fab.vue +88 -86
  67. package/dist/footer/footer.vue +36 -34
  68. package/dist/form/README.en-US.md +17 -24
  69. package/dist/form/README.md +18 -25
  70. package/dist/form/form.css +1 -166
  71. package/dist/form/form.vue +251 -236
  72. package/dist/form/props.ts +2 -21
  73. package/dist/form/type.ts +7 -70
  74. package/dist/form-item/README.en-US.md +4 -5
  75. package/dist/form-item/README.md +4 -5
  76. package/dist/form-item/form-item.css +69 -96
  77. package/dist/form-item/form-item.vue +315 -336
  78. package/dist/form-item/form-model.ts +125 -173
  79. package/dist/form-item/props.ts +4 -17
  80. package/dist/form-item/type.ts +43 -1
  81. package/dist/grid/grid.vue +53 -51
  82. package/dist/grid-item/grid-item.vue +121 -119
  83. package/dist/guide/README.md +1 -1
  84. package/dist/guide/guide.vue +281 -277
  85. package/dist/icon/README.md +2 -4
  86. package/dist/icon/icon.vue +78 -76
  87. package/dist/image/README.md +1 -1
  88. package/dist/image/image.vue +103 -101
  89. package/dist/image-viewer/image-viewer.vue +160 -158
  90. package/dist/image-viewer/props.ts +2 -2
  91. package/dist/image-viewer/type.ts +1 -1
  92. package/dist/index.js +3 -0
  93. package/dist/indexes/indexes.vue +264 -267
  94. package/dist/indexes-anchor/indexes-anchor.vue +41 -41
  95. package/dist/input/input.vue +192 -192
  96. package/dist/input/props.ts +6 -6
  97. package/dist/input/type.ts +3 -3
  98. package/dist/link/link.vue +73 -71
  99. package/dist/loading/loading.vue +59 -59
  100. package/dist/locale/ar_KW.ts +157 -0
  101. package/dist/locale/en_US.ts +146 -0
  102. package/dist/locale/it_IT.ts +145 -0
  103. package/dist/locale/ja_JP.ts +132 -0
  104. package/dist/locale/ko_KR.ts +132 -0
  105. package/dist/locale/ru_RU.ts +157 -0
  106. package/dist/locale/zh_CN.ts +133 -0
  107. package/dist/locale/zh_TW.ts +132 -0
  108. package/dist/message/message.vue +181 -173
  109. package/dist/message/props.ts +2 -2
  110. package/dist/message/type.ts +1 -1
  111. package/dist/message-item/message-item.vue +192 -184
  112. package/dist/mixins/using-config.js +39 -0
  113. package/dist/navbar/navbar.vue +201 -199
  114. package/dist/notice-bar/notice-bar.vue +175 -171
  115. package/dist/notice-bar/props.ts +2 -2
  116. package/dist/notice-bar/type.ts +1 -1
  117. package/dist/npm/dayjs/esm/locale/ar.js +81 -0
  118. package/dist/npm/dayjs/esm/locale/it.js +39 -0
  119. package/dist/overlay/overlay.vue +50 -48
  120. package/dist/picker/picker.vue +168 -161
  121. package/dist/picker-item/picker-item.vue +269 -269
  122. package/dist/popover/README.md +1 -1
  123. package/dist/popover/popover.vue +262 -261
  124. package/dist/popover/props.ts +4 -4
  125. package/dist/popover/type.ts +2 -2
  126. package/dist/popup/popup.vue +46 -45
  127. package/dist/progress/README.md +1 -1
  128. package/dist/progress/progress.vue +76 -76
  129. package/dist/pull-down-refresh/props.ts +2 -2
  130. package/dist/pull-down-refresh/pull-down-refresh.vue +240 -234
  131. package/dist/pull-down-refresh/type.ts +1 -1
  132. package/dist/qrcode/README.md +1 -1
  133. package/dist/qrcode/components/qrcode-canvas/qrcode-canvas.vue +340 -338
  134. package/dist/qrcode/components/qrcode-status/qrcode-status.vue +6 -6
  135. package/dist/qrcode/qrcode.vue +93 -87
  136. package/dist/radio/props.ts +6 -6
  137. package/dist/radio/radio.vue +118 -120
  138. package/dist/radio/type.ts +3 -3
  139. package/dist/radio-group/props.ts +4 -4
  140. package/dist/radio-group/radio-group.vue +136 -134
  141. package/dist/radio-group/type.ts +4 -4
  142. package/dist/rate/computed.js +2 -2
  143. package/dist/rate/props.ts +4 -4
  144. package/dist/rate/rate.vue +155 -154
  145. package/dist/rate/type.ts +2 -2
  146. package/dist/result/result.vue +41 -39
  147. package/dist/row/row.vue +38 -36
  148. package/dist/scroll-view/scroll-view.vue +24 -22
  149. package/dist/search/props.ts +2 -2
  150. package/dist/search/search.vue +127 -125
  151. package/dist/search/type.ts +1 -1
  152. package/dist/side-bar/side-bar.vue +57 -55
  153. package/dist/side-bar-item/side-bar-item.vue +86 -86
  154. package/dist/skeleton/skeleton.vue +126 -124
  155. package/dist/slider/README.md +1 -1
  156. package/dist/slider/props.ts +2 -2
  157. package/dist/slider/slider.vue +457 -457
  158. package/dist/slider/type.ts +1 -1
  159. package/dist/step-item/step-item.vue +77 -75
  160. package/dist/stepper/props.ts +2 -2
  161. package/dist/stepper/stepper.vue +168 -149
  162. package/dist/stepper/type.ts +1 -1
  163. package/dist/steps/props.ts +2 -2
  164. package/dist/steps/steps.vue +83 -81
  165. package/dist/steps/type.ts +1 -1
  166. package/dist/sticky/sticky.vue +104 -102
  167. package/dist/swipe-cell/swipe-cell.vue +91 -89
  168. package/dist/swiper/README.md +1 -1
  169. package/dist/swiper/swiper.vue +91 -89
  170. package/dist/swiper-nav/swiper-nav.vue +38 -36
  171. package/dist/switch/props.ts +2 -2
  172. package/dist/switch/switch.vue +62 -62
  173. package/dist/switch/type.ts +1 -1
  174. package/dist/tab-bar/tab-bar.vue +88 -86
  175. package/dist/tab-bar-item/tab-bar-item.vue +85 -82
  176. package/dist/tab-panel/tab-panel.vue +66 -64
  177. package/dist/tabs/tabs.vue +294 -287
  178. package/dist/tag/tag.vue +79 -77
  179. package/dist/textarea/props.ts +6 -6
  180. package/dist/textarea/textarea.vue +127 -126
  181. package/dist/textarea/type.ts +3 -3
  182. package/dist/toast/toast.vue +107 -106
  183. package/dist/transition/transition.vue +30 -28
  184. package/dist/tree-select/tree-select.vue +151 -151
  185. package/dist/types/config-provider.d.ts +7 -0
  186. package/dist/types/index.d.ts +2 -0
  187. package/dist/types/popover.d.ts +7 -0
  188. package/dist/upload/README.en-US.md +13 -14
  189. package/dist/upload/README.md +11 -12
  190. package/dist/upload/props.ts +2 -4
  191. package/dist/upload/type.ts +12 -11
  192. package/dist/upload/upload.css +1 -1
  193. package/dist/upload/upload.vue +672 -512
  194. package/dist/watermark/watermark.vue +151 -149
  195. package/global.d.ts +2 -0
  196. package/package.json +15 -3
  197. package/dist/form/form-item-props.ts +0 -56
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <view
3
- :style="tools._style([customStyle])"
3
+ :style="'' + tools._style([customStyle])"
4
4
  :class="classPrefix + ' ' + tClass"
5
5
  disable-scroll
6
6
  >
@@ -14,7 +14,7 @@
14
14
  <view
15
15
  v-for="(item, index) in innerIndexList"
16
16
  :key="index"
17
- :class="tools.cls(classPrefix + '__sidebar-item', [['active', dataCurrent === item]]) + ' ' + tClassSidebarItem"
17
+ :class="[classPrefix + '__sidebar-item', dataCurrent === item ? classPrefix + '__sidebar-item' + '--active' : '', tClassSidebarItem]"
18
18
  :data-index="index"
19
19
  @click.stop="onClick(item, index)"
20
20
  >
@@ -37,9 +37,7 @@
37
37
  </view>
38
38
  </template>
39
39
  <script>
40
- import TIcon from '../icon/icon';
41
- import TCell from '../cell/cell';
42
- import TCellGroup from '../cell-group/cell-group';
40
+
43
41
  import { uniComponent } from '../common/src/index';
44
42
  import { prefix } from '../common/config';
45
43
  import props from './props';
@@ -53,317 +51,316 @@ import { ParentMixin, RELATION_MAP } from '../common/relation';
53
51
  const name = `${prefix}-indexes`;
54
52
 
55
53
 
56
- export default uniComponent({
57
- name,
58
- options: {
59
- styleIsolation: 'shared',
60
- },
61
- controlledProps: [
62
- {
63
- key: 'current',
64
- event: 'change',
65
- },
66
- ],
67
- externalClasses: [
68
- `${prefix}-class`,
69
- `${prefix}-class-sidebar`,
70
- `${prefix}-class-sidebar-item`,
71
- ],
72
- mixins: [
73
- pageScrollMixin(),
74
- ParentMixin(RELATION_MAP.IndexesAnchor),
75
- ],
54
+ export default {
76
55
  components: {
77
- TIcon,
78
- TCell,
79
- TCellGroup,
80
56
  },
81
- props: {
82
- ...props,
83
- },
84
- emits: [
85
- 'change',
86
- 'select',
87
- ],
88
- data() {
89
- return {
90
- prefix,
91
- classPrefix: name,
92
- innerHeight: 0,
93
- innerIndexList: [],
94
- scrollTop: 0,
95
- activeAnchor: this.current,
96
- showTips: false,
97
-
98
- tools,
99
-
100
- timer: null,
101
- groupTop: [],
102
- sidebar: null,
103
- currentTouchAnchor: null,
104
-
105
- dataCurrent: this.current,
106
- };
107
- },
108
- watch: {
109
- indexList: {
110
- handler(v, pre) {
111
- const cb = () => {
112
- this.setIndexList(v);
113
- this.setHeight(this.innerHeight);
114
- };
115
- if (!pre?.length) {
116
- // 防止抖音小程序报错
117
- setTimeout(() => {
118
- cb();
119
- }, 33);
120
- } else {
121
- cb();
122
- }
123
- },
124
- immediate: true,
57
+ ...uniComponent({
58
+ name,
59
+ options: {
60
+ styleIsolation: 'shared',
125
61
  },
126
- height(v) {
127
- this.setHeight(v);
62
+ controlledProps: [
63
+ {
64
+ key: 'current',
65
+ event: 'change',
66
+ },
67
+ ],
68
+ externalClasses: [
69
+ `${prefix}-class`,
70
+ `${prefix}-class-sidebar`,
71
+ `${prefix}-class-sidebar-item`,
72
+ ],
73
+ mixins: [
74
+ pageScrollMixin(),
75
+ ParentMixin(RELATION_MAP.IndexesAnchor),
76
+ ],
77
+ props: {
78
+ ...props,
128
79
  },
129
- stickyOffset() {
130
- this.setAnchorByCurrent(this.dataCurrent, 'update', true);
80
+ emits: [
81
+ 'change',
82
+ 'select',
83
+ ],
84
+ data() {
85
+ return {
86
+ prefix,
87
+ classPrefix: name,
88
+ innerHeight: 0,
89
+ innerIndexList: [],
90
+ scrollTop: 0,
91
+ activeAnchor: this.current,
92
+ showTips: false,
93
+
94
+ tools,
95
+
96
+ timer: null,
97
+ groupTop: [],
98
+ sidebar: null,
99
+ currentTouchAnchor: null,
100
+
101
+ dataCurrent: this.current,
102
+ };
131
103
  },
104
+ watch: {
105
+ indexList: {
106
+ handler(v, pre) {
107
+ const cb = () => {
108
+ this.setIndexList(v);
109
+ this.setHeight(this.innerHeight);
110
+ };
111
+ if (!pre?.length) {
112
+ // 防止抖音小程序报错
113
+ setTimeout(() => {
114
+ cb();
115
+ }, 33);
116
+ } else {
117
+ cb();
118
+ }
119
+ },
120
+ immediate: true,
121
+ },
122
+ height(v) {
123
+ this.setHeight(v);
124
+ },
125
+ stickyOffset() {
126
+ this.setAnchorByCurrent(this.dataCurrent, 'update', true);
127
+ },
132
128
 
133
- current: {
134
- handler(val) {
135
- this.dataCurrent = val;
129
+ current: {
130
+ handler(val) {
131
+ this.dataCurrent = val;
132
+ },
133
+ immediate: true,
136
134
  },
137
- immediate: true,
138
- },
139
- dataCurrent: {
140
- handler(e) {
141
- if (e && this.activeAnchor && e !== this.activeAnchor) {
142
- this.setAnchorByCurrent(e, 'update');
143
- }
135
+ dataCurrent: {
136
+ handler(e) {
137
+ if (e && this.activeAnchor && e !== this.activeAnchor) {
138
+ this.setAnchorByCurrent(e, 'update');
139
+ }
140
+ },
141
+ immediate: true,
144
142
  },
145
- immediate: true,
146
143
  },
147
- },
148
- mounted() {
149
- this.timer = null;
150
- this.groupTop = [];
151
- this.sidebar = null;
152
-
153
- if (this.innerHeight === 0) {
154
- this.setHeight();
155
- }
156
-
157
- if (this.indexList === null) {
158
- this.setIndexList();
159
- }
160
- },
161
- methods: {
162
- getFirstCharacter,
163
- setHeight(height) {
164
- if (!height) {
165
- const { windowHeight } = systemInfo;
166
- height = windowHeight;
144
+ mounted() {
145
+ this.timer = null;
146
+ this.groupTop = [];
147
+ this.sidebar = null;
148
+
149
+ if (this.innerHeight === 0) {
150
+ this.setHeight();
167
151
  }
168
- this.innerHeight = height;
169
152
 
170
- setTimeout(() => {
171
- this.getAllRect();
172
- });
153
+ if (this.indexList === null) {
154
+ this.setIndexList();
155
+ }
173
156
  },
157
+ methods: {
158
+ getFirstCharacter,
159
+ setHeight(height) {
160
+ if (!height) {
161
+ const { windowHeight } = systemInfo;
162
+ height = windowHeight;
163
+ }
164
+ this.innerHeight = height;
174
165
 
175
- setIndexList(list) {
176
- if (!list) {
177
- const start = 'A'.charCodeAt(0);
178
- const alphabet = [];
166
+ setTimeout(() => {
167
+ this.getAllRect();
168
+ });
169
+ },
179
170
 
180
- for (let i = start, end = start + 26; i < end; i += 1) {
181
- alphabet.push(String.fromCharCode(i));
182
- }
171
+ setIndexList(list) {
172
+ if (!list) {
173
+ const start = 'A'.charCodeAt(0);
174
+ const alphabet = [];
183
175
 
184
- this.innerIndexList = alphabet;
185
- } else {
186
- this.innerIndexList = list;
187
- }
188
- },
176
+ for (let i = start, end = start + 26; i < end; i += 1) {
177
+ alphabet.push(String.fromCharCode(i));
178
+ }
189
179
 
190
- getAllRect() {
191
- this.getAnchorsRect().then(() => {
192
- this.groupTop.forEach((item, index) => {
193
- const next = this.groupTop[index + 1];
194
- item.totalHeight = (next?.top || Infinity) - item.top;
195
- });
180
+ this.innerIndexList = alphabet;
181
+ } else {
182
+ this.innerIndexList = list;
183
+ }
184
+ },
196
185
 
197
- const current = this.dataCurrent || this.innerIndexList[0];
198
- this.setAnchorByCurrent(current, 'init');
199
- })
200
- .catch((err) => {
201
- console.log('err', err);
202
- });
203
- this.getSidebarRect();
204
- },
186
+ getAllRect() {
187
+ this.getAnchorsRect().then(() => {
188
+ this.groupTop.forEach((item, index) => {
189
+ const next = this.groupTop[index + 1];
190
+ item.totalHeight = (next?.top || Infinity) - item.top;
191
+ });
205
192
 
206
- getAnchorsRect() {
207
- return Promise.all((this.children || [])
208
- .map(child => getRect(child, `.${name}-anchor`)
209
- .then((rect) => {
210
- this.groupTop.push({
211
- height: rect.height,
212
- top: rect.top,
213
- anchor: child.index,
214
- });
215
- })
193
+ const current = this.dataCurrent || this.innerIndexList[0];
194
+ this.setAnchorByCurrent(current, 'init');
195
+ })
216
196
  .catch((err) => {
217
- console.log('err', err);
218
- })));
219
- },
197
+ console.warn('err', err);
198
+ });
199
+ this.getSidebarRect();
200
+ },
220
201
 
221
- getSidebarRect() {
222
- getRect(this, `#id-${name}__bar`).then((rect) => {
223
- const { top, height } = rect;
224
- const { length } = this.innerIndexList;
202
+ getAnchorsRect() {
203
+ return Promise.all((this.children || [])
204
+ .map(child => getRect(child, `.${name}-anchor`)
205
+ .then((rect) => {
206
+ this.groupTop.push({
207
+ height: rect.height,
208
+ top: rect.top,
209
+ anchor: child.index,
210
+ });
211
+ })
212
+ .catch((err) => {
213
+ console.warn('err', err);
214
+ })));
215
+ },
225
216
 
226
- this.sidebar = {
227
- top,
228
- height,
229
- itemHeight: (height - (length - 1) * 2) / length, // margin = 2px
230
- };
231
- })
232
- .catch((err) => {
233
- console.log('err', err);
234
- });
235
- },
217
+ getSidebarRect() {
218
+ getRect(this, `#id-${name}__bar`).then((rect) => {
219
+ const { top, height } = rect;
220
+ const { length } = this.innerIndexList;
221
+
222
+ this.sidebar = {
223
+ top,
224
+ height,
225
+ itemHeight: (height - (length - 1) * 2) / length, // margin = 2px
226
+ };
227
+ })
228
+ .catch((err) => {
229
+ console.warn('err', err);
230
+ });
231
+ },
236
232
 
237
- toggleTips(flag) {
238
- if (!flag) {
239
- clearInterval(this.timer);
240
- this.timer = setTimeout(() => {
241
- this.showTips = false;
242
- }, 300);
243
- } else {
244
- this.showTips = true;
245
- }
246
- },
233
+ toggleTips(flag) {
234
+ if (!flag) {
235
+ clearInterval(this.timer);
236
+ this.timer = setTimeout(() => {
237
+ this.showTips = false;
238
+ }, 300);
239
+ } else {
240
+ this.showTips = true;
241
+ }
242
+ },
247
243
 
248
- setAnchorByCurrent(current, source, force) {
249
- const { stickyOffset } = this;
244
+ setAnchorByCurrent(current, source, force) {
245
+ const { stickyOffset } = this;
250
246
 
251
- if (this.activeAnchor !== null && this.activeAnchor === current && !force) return;
247
+ if (this.activeAnchor !== null && this.activeAnchor === current && !force) return;
252
248
 
253
- const target = this.groupTop.find(item => item.anchor === current);
249
+ const target = this.groupTop.find(item => item.anchor === current);
254
250
 
255
- if (target) {
256
- const scrollTop = target.top - stickyOffset;
251
+ if (target) {
252
+ const scrollTop = target.top - stickyOffset;
257
253
 
258
- this.setAnchorOnScroll(scrollTop);
259
- uni.pageScrollTo({
260
- scrollTop,
261
- duration: 0,
262
- });
254
+ this.setAnchorOnScroll(scrollTop);
255
+ uni.pageScrollTo({
256
+ scrollTop,
257
+ duration: 0,
258
+ });
263
259
 
264
- if (['click', 'touch'].includes(source)) {
265
- this.toggleTips(true);
266
- this.$emit('select', { index: current });
260
+ if (['click', 'touch'].includes(source)) {
261
+ this.toggleTips(true);
262
+ this.$emit('select', { index: current });
263
+ }
267
264
  }
268
- }
269
- },
270
-
271
- onClick(current) {
272
- this.setAnchorByCurrent(current, 'click');
273
- },
265
+ },
274
266
 
275
- onTouchMove(e) {
276
- this.onAnchorTouch(e);
277
- },
267
+ onClick(current) {
268
+ this.setAnchorByCurrent(current, 'click');
269
+ },
278
270
 
279
- onTouchCancel() {
280
- this.toggleTips(false);
281
- },
271
+ onTouchMove(e) {
272
+ this.onAnchorTouch(e);
273
+ },
282
274
 
283
- onTouchEnd(e) {
284
- this.toggleTips(false);
285
- this.onAnchorTouch(e);
286
- },
275
+ onTouchCancel() {
276
+ this.toggleTips(false);
277
+ },
287
278
 
288
- onAnchorTouch: throttle(function (e) {
289
- const getAnchorIndex = (clientY) => {
290
- const offsetY = clientY - this.sidebar.top;
291
- const max = this.innerIndexList.length - 1;
279
+ onTouchEnd(e) {
280
+ this.toggleTips(false);
281
+ this.onAnchorTouch(e);
282
+ },
292
283
 
293
- if (offsetY <= 0) {
294
- return 0;
295
- }
284
+ onAnchorTouch: throttle(function (e) {
285
+ const getAnchorIndex = (clientY) => {
286
+ const offsetY = clientY - this.sidebar.top;
287
+ const max = this.innerIndexList.length - 1;
296
288
 
297
- if (offsetY > this.sidebar.height) {
298
- return max;
299
- }
289
+ if (offsetY <= 0) {
290
+ return 0;
291
+ }
300
292
 
301
- return Math.min(max, Math.floor(offsetY / this.sidebar.itemHeight));
302
- };
303
- const index = getAnchorIndex(e.changedTouches[0].clientY);
293
+ if (offsetY > this.sidebar.height) {
294
+ return max;
295
+ }
304
296
 
305
- this.setAnchorByCurrent(this.innerIndexList[index], 'touch');
306
- }, 1000 / 30), // 30 frame
297
+ return Math.min(max, Math.floor(offsetY / this.sidebar.itemHeight));
298
+ };
299
+ const index = getAnchorIndex(e.changedTouches[0].clientY);
307
300
 
308
- setAnchorOnScroll(scrollTop) {
309
- if (!this.groupTop) {
310
- return;
311
- }
301
+ this.setAnchorByCurrent(this.innerIndexList[index], 'touch');
302
+ }, 1000 / 30), // 30 frame
312
303
 
313
- const { sticky, stickyOffset } = this;
304
+ setAnchorOnScroll(scrollTop) {
305
+ if (!this.groupTop) {
306
+ return;
307
+ }
314
308
 
315
- scrollTop += stickyOffset;
309
+ const { sticky, stickyOffset } = this;
316
310
 
317
- const curIndex = this.groupTop.findIndex(group => scrollTop >= group.top - group.height && scrollTop <= group.top + group.totalHeight - group.height);
311
+ scrollTop += stickyOffset;
318
312
 
319
- if (curIndex === -1) return;
313
+ const curIndex = this.groupTop.findIndex(group => scrollTop >= group.top - group.height && scrollTop <= group.top + group.totalHeight - group.height);
320
314
 
321
- const curGroup = this.groupTop[curIndex];
315
+ if (curIndex === -1) return;
322
316
 
323
- this.activeAnchor = curGroup.anchor;
324
- setTimeout(() => {
325
- this._trigger('change', { index: curGroup.anchor, current: curGroup.anchor });
326
- });
317
+ const curGroup = this.groupTop[curIndex];
327
318
 
328
- if (sticky) {
329
- const offset = curGroup.top - scrollTop;
330
- const betwixt = offset < curGroup.height && offset > 0 && scrollTop > stickyOffset;
319
+ this.activeAnchor = curGroup.anchor;
320
+ setTimeout(() => {
321
+ this._trigger('change', { index: curGroup.anchor, current: curGroup.anchor });
322
+ });
331
323
 
332
- this.children.forEach((child, index) => {
333
- if (index === curIndex) {
334
- const sticky = scrollTop > stickyOffset;
335
- const anchorStyle = `transform: translate3d(0, ${betwixt ? offset : 0}px, 0); top: ${stickyOffset}px`;
336
- if (anchorStyle !== child.anchorStyle || sticky !== child.sticky) {
337
- child.sticky = sticky;
338
- child.active = true;
339
- child.dataStyle = `height: ${curGroup.height}px`;
340
- child.anchorStyle = anchorStyle;
341
- }
342
- } else if (index + 1 === curIndex) {
324
+ if (sticky) {
325
+ const offset = curGroup.top - scrollTop;
326
+ const betwixt = offset < curGroup.height && offset > 0 && scrollTop > stickyOffset;
327
+
328
+ this.children.forEach((child, index) => {
329
+ if (index === curIndex) {
330
+ const sticky = scrollTop > stickyOffset;
331
+ const anchorStyle = `transform: translate3d(0, ${betwixt ? offset : 0}px, 0); top: ${stickyOffset}px`;
332
+ if (anchorStyle !== child.anchorStyle || sticky !== child.sticky) {
333
+ child.sticky = sticky;
334
+ child.active = true;
335
+ child.dataStyle = `height: ${curGroup.height}px`;
336
+ child.anchorStyle = anchorStyle;
337
+ }
338
+ } else if (index + 1 === curIndex) {
343
339
  // 两个 anchor 同时出现时的上一个
344
- const anchorStyle = `transform: translate3d(0, ${
345
- betwixt ? offset - curGroup.height : 0
346
- }px, 0); top: ${stickyOffset}px`;
347
- if (anchorStyle !== child.anchorStyle) {
348
- child.sticky = true;
349
- child.active = true;
350
- child.dataStyle = `height: ${curGroup.height}px`;
351
- child.anchorStyle = anchorStyle;
340
+ const anchorStyle = `transform: translate3d(0, ${
341
+ betwixt ? offset - curGroup.height : 0
342
+ }px, 0); top: ${stickyOffset}px`;
343
+ if (anchorStyle !== child.anchorStyle) {
344
+ child.sticky = true;
345
+ child.active = true;
346
+ child.dataStyle = `height: ${curGroup.height}px`;
347
+ child.anchorStyle = anchorStyle;
348
+ }
349
+ } else {
350
+ child.active = false;
351
+ child.sticky = false;
352
+ child.dataStyle = '';
353
+ child.anchorStyle = '';
352
354
  }
353
- } else {
354
- child.active = false;
355
- child.sticky = false;
356
- child.dataStyle = '';
357
- child.anchorStyle = '';
358
- }
359
- });
360
- }
361
- },
355
+ });
356
+ }
357
+ },
362
358
 
363
- onScroll({ scrollTop }) {
364
- this.setAnchorOnScroll(scrollTop);
359
+ onScroll({ scrollTop }) {
360
+ this.setAnchorOnScroll(scrollTop);
361
+ },
365
362
  },
366
- },
367
- });
363
+ }),
364
+ };
368
365
  </script>
369
366
  <style scoped src="./indexes.css"></style>