@tarojs/taro-h5 3.4.0-beta.2 → 3.4.2

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 (168) hide show
  1. package/dist/api/ad/index.js +4 -0
  2. package/dist/api/ai/facial.js +5 -0
  3. package/dist/api/ai/index.js +2 -0
  4. package/dist/api/ai/visual.js +5 -0
  5. package/dist/api/alipay/index.js +3 -0
  6. package/dist/api/base/crypto.js +3 -0
  7. package/dist/api/base/debug.js +4 -0
  8. package/dist/api/base/index.js +17 -0
  9. package/dist/api/base/performance.js +4 -0
  10. package/dist/api/base/system.js +187 -0
  11. package/dist/api/base/update.js +4 -0
  12. package/dist/api/base/weapp/app-event.js +18 -0
  13. package/dist/api/base/weapp/life-cycle.js +4 -0
  14. package/dist/api/canvas/CanvasContext.js +191 -0
  15. package/dist/api/canvas/canvasGetImageData.js +25 -0
  16. package/dist/api/canvas/canvasPutImageData.js +22 -0
  17. package/dist/api/canvas/canvasToTempFilePath.js +22 -0
  18. package/dist/api/canvas/createCanvasContext.js +16 -0
  19. package/dist/api/canvas/index.js +12 -0
  20. package/dist/api/cloud/index.js +21 -0
  21. package/dist/api/data-analysis/index.js +5 -0
  22. package/dist/api/device/accelerometer.js +83 -0
  23. package/dist/api/device/accessibility.js +3 -0
  24. package/dist/api/device/battery.js +21 -0
  25. package/dist/api/device/bluetooth-ble.js +18 -0
  26. package/dist/api/device/bluetooth-peripheral.js +5 -0
  27. package/dist/api/device/bluetooth.js +15 -0
  28. package/dist/api/device/calendar.js +4 -0
  29. package/dist/api/device/clipboard.js +65 -0
  30. package/dist/api/device/compass.js +64 -0
  31. package/dist/api/device/contact.js +4 -0
  32. package/dist/api/device/crypto.js +3 -0
  33. package/dist/api/device/gyroscope.js +6 -0
  34. package/dist/api/device/iBeacon.js +9 -0
  35. package/dist/api/device/index.js +23 -0
  36. package/dist/api/device/keyboard.js +6 -0
  37. package/dist/api/device/memory.js +4 -0
  38. package/dist/api/device/motion.js +81 -0
  39. package/dist/api/device/network.js +78 -0
  40. package/dist/api/device/nfc.js +9 -0
  41. package/dist/api/device/phone.js +24 -0
  42. package/dist/api/device/scan.js +6 -0
  43. package/dist/api/device/screen.js +8 -0
  44. package/dist/api/device/vibrate.js +35 -0
  45. package/dist/api/device/wifi.js +13 -0
  46. package/dist/api/ext/index.js +4 -0
  47. package/dist/api/files/index.js +10 -0
  48. package/dist/api/framework/index.js +7 -0
  49. package/dist/api/index.js +24 -0
  50. package/dist/api/location/chooseLocation.js +93 -0
  51. package/dist/api/location/index.js +13 -0
  52. package/dist/api/location/style.css +79 -0
  53. package/dist/api/media/EditorContext.js +19 -0
  54. package/dist/api/media/audio/InnerAudioContext.js +84 -0
  55. package/dist/api/media/audio/index.js +15 -0
  56. package/dist/api/media/background-audio/BackgroundAudioManager.js +86 -0
  57. package/dist/api/media/background-audio/index.js +15 -0
  58. package/dist/api/media/camera.js +3 -0
  59. package/dist/api/media/image/chooseImage.js +74 -0
  60. package/dist/api/media/image/getImageInfo.js +31 -0
  61. package/dist/api/media/image/index.js +9 -0
  62. package/dist/api/media/image/previewImage.js +67 -0
  63. package/dist/api/media/index.js +12 -0
  64. package/dist/api/media/live.js +4 -0
  65. package/dist/api/media/map.js +3 -0
  66. package/dist/api/media/media-recorder.js +3 -0
  67. package/dist/api/media/recorder.js +5 -0
  68. package/dist/api/media/video/index.js +74 -0
  69. package/dist/api/media/video-decoder.js +3 -0
  70. package/dist/api/media/video-processing.js +3 -0
  71. package/dist/api/media/voip.js +16 -0
  72. package/dist/api/navigate/index.js +6 -0
  73. package/dist/api/network/download.js +124 -0
  74. package/dist/api/network/index.js +7 -0
  75. package/dist/api/network/mdns.js +12 -0
  76. package/dist/api/network/request/index.js +125 -0
  77. package/dist/api/network/tcp.js +3 -0
  78. package/dist/api/network/udp.js +3 -0
  79. package/dist/api/network/upload.js +146 -0
  80. package/dist/api/network/utils.js +65 -0
  81. package/dist/api/network/websocket/index.js +70 -0
  82. package/dist/api/network/websocket/socketTask.js +63 -0
  83. package/dist/api/open-api/account.js +3 -0
  84. package/dist/api/open-api/address.js +3 -0
  85. package/dist/api/open-api/authorize.js +4 -0
  86. package/dist/api/open-api/card.js +4 -0
  87. package/dist/api/open-api/channels-live.js +8 -0
  88. package/dist/api/open-api/customer-service.js +3 -0
  89. package/dist/api/open-api/facial.js +6 -0
  90. package/dist/api/open-api/favorites.js +4 -0
  91. package/dist/api/open-api/group.js +3 -0
  92. package/dist/api/open-api/index.js +18 -0
  93. package/dist/api/open-api/invoice.js +4 -0
  94. package/dist/api/open-api/license-plate.js +3 -0
  95. package/dist/api/open-api/login.js +5 -0
  96. package/dist/api/open-api/red-package.js +3 -0
  97. package/dist/api/open-api/settings.js +4 -0
  98. package/dist/api/open-api/soter.js +5 -0
  99. package/dist/api/open-api/subscribe-message.js +3 -0
  100. package/dist/api/open-api/user-info.js +4 -0
  101. package/dist/api/open-api/werun.js +4 -0
  102. package/dist/api/payment/index.js +4 -0
  103. package/dist/api/route/index.js +3 -0
  104. package/dist/api/share/index.js +12 -0
  105. package/dist/api/storage/background-fetch.js +6 -0
  106. package/dist/api/storage/index.js +157 -0
  107. package/dist/api/swan/index.js +26 -0
  108. package/dist/api/taro.js +47 -0
  109. package/dist/api/ui/animation/index.js +288 -0
  110. package/dist/api/ui/background.js +4 -0
  111. package/dist/api/ui/custom-component.js +3 -0
  112. package/dist/api/ui/fonts.js +51 -0
  113. package/dist/api/ui/index.js +12 -0
  114. package/dist/api/ui/interaction/actionSheet.js +188 -0
  115. package/dist/api/ui/interaction/index.js +268 -0
  116. package/dist/api/ui/interaction/modal.js +207 -0
  117. package/dist/api/ui/interaction/toast.js +195 -0
  118. package/dist/api/ui/menu.js +3 -0
  119. package/dist/api/ui/navigation-bar/index.js +42 -0
  120. package/dist/api/ui/pull-down-refresh.js +26 -0
  121. package/dist/api/ui/scroll/index.js +83 -0
  122. package/dist/api/ui/sticky.js +3 -0
  123. package/dist/api/ui/tab-bar.js +282 -0
  124. package/dist/api/ui/window.js +31 -0
  125. package/dist/api/utils/handler.js +80 -0
  126. package/dist/api/utils/index.js +172 -0
  127. package/dist/api/worker/index.js +3 -0
  128. package/dist/api/wxml/index.js +6 -0
  129. package/dist/api/wxml/nodesRef.js +42 -0
  130. package/dist/api/wxml/selectorQuery.js +201 -0
  131. package/dist/index.cjs.js +5028 -6988
  132. package/dist/index.js +4 -10767
  133. package/dist/taroApis.js +1 -1
  134. package/dist/types/type.js +2 -0
  135. package/package.json +11 -13
  136. package/src/api/ai/visual.ts +3 -0
  137. package/src/api/base/system.ts +207 -0
  138. package/src/api/canvas/CanvasContext.ts +42 -39
  139. package/src/api/canvas/createCanvasContext.ts +2 -2
  140. package/src/api/canvas/index.ts +10 -2
  141. package/src/api/cloud/index.ts +4 -0
  142. package/src/api/device/battery.ts +18 -1
  143. package/src/api/device/index.ts +1 -0
  144. package/src/api/{base/system → device}/network.ts +35 -15
  145. package/src/api/device/wifi.ts +1 -0
  146. package/src/api/location/chooseLocation.ts +2 -2
  147. package/src/api/media/{editor.ts → EditorContext.ts} +2 -0
  148. package/src/api/media/audio/InnerAudioContext.ts +98 -0
  149. package/src/api/media/audio/index.ts +1 -86
  150. package/src/api/media/background-audio/BackgroundAudioManager.ts +103 -0
  151. package/src/api/media/{background-audio.ts → background-audio/index.ts} +7 -2
  152. package/src/api/media/image/previewImage.ts +4 -25
  153. package/src/api/media/index.ts +0 -1
  154. package/src/api/network/download.ts +5 -5
  155. package/src/api/network/upload.ts +7 -13
  156. package/src/api/network/websocket/index.ts +1 -1
  157. package/src/api/ui/animation/index.ts +11 -12
  158. package/src/api/ui/fonts.ts +61 -2
  159. package/src/api/ui/interaction/index.ts +12 -10
  160. package/src/api/ui/navigation-bar/index.ts +2 -2
  161. package/src/api/ui/scroll/index.ts +3 -3
  162. package/src/api/utils/handler.ts +4 -4
  163. package/src/api/utils/index.ts +34 -13
  164. package/src/api/wxml/nodesRef.ts +10 -3
  165. package/src/api/wxml/selectorQuery.ts +68 -23
  166. package/src/index.ts +2 -2
  167. package/src/api/base/system/index.ts +0 -2
  168. package/src/api/base/system/info.ts +0 -64
@@ -0,0 +1,42 @@
1
+ import { MethodHandler } from '../../utils/handler';
2
+ import { getParameterError, shouldBeObject, temporarilyNotSupport } from '../../utils';
3
+ // 导航栏
4
+ export const showNavigationBarLoading = temporarilyNotSupport('showNavigationBarLoading');
5
+ export function setNavigationBarTitle(options) {
6
+ // options must be an Object
7
+ const isObject = shouldBeObject(options);
8
+ if (!isObject.flag) {
9
+ const res = { errMsg: `setNavigationBarTitle:fail ${isObject.msg}` };
10
+ console.error(res.errMsg);
11
+ return Promise.reject(res);
12
+ }
13
+ const { title, success, fail, complete } = options;
14
+ const handle = new MethodHandler({ name: 'setNavigationBarTitle', success, fail, complete });
15
+ if (!title || typeof title !== 'string') {
16
+ return handle.fail({
17
+ errMsg: getParameterError({
18
+ para: 'title',
19
+ correct: 'String',
20
+ wrong: title
21
+ })
22
+ });
23
+ }
24
+ if (document.title !== title) {
25
+ document.title = title;
26
+ }
27
+ return handle.success();
28
+ }
29
+ /**
30
+ * 设置页面导航条颜色
31
+ */
32
+ export const setNavigationBarColor = (options) => {
33
+ const { backgroundColor, success, fail, complete } = options;
34
+ const handle = new MethodHandler({ name: 'setNavigationBarColor', success, fail, complete });
35
+ const meta = document.createElement('meta');
36
+ meta.setAttribute('name', 'theme-color');
37
+ meta.setAttribute('content', backgroundColor);
38
+ document.head.appendChild(meta);
39
+ return handle.success();
40
+ };
41
+ export const hideNavigationBarLoading = temporarilyNotSupport('hideNavigationBarLoading');
42
+ export const hideHomeButton = temporarilyNotSupport('hideHomeButton');
@@ -0,0 +1,26 @@
1
+ import Taro from '@tarojs/api';
2
+ import { MethodHandler } from '../utils/handler';
3
+ /**
4
+ * 开始下拉刷新。调用后触发下拉刷新动画,效果与用户手动下拉刷新一致。
5
+ */
6
+ export const startPullDownRefresh = function ({ success, fail, complete } = {}) {
7
+ const handle = new MethodHandler({ name: 'startPullDownRefresh', success, fail, complete });
8
+ return new Promise((resolve, reject) => {
9
+ Taro.eventCenter.trigger('__taroStartPullDownRefresh', {
10
+ successHandler: (res = {}) => handle.success(res, resolve),
11
+ errorHandler: (res = {}) => handle.fail(res, reject)
12
+ });
13
+ });
14
+ };
15
+ /**
16
+ * 停止当前页面下拉刷新。
17
+ */
18
+ export const stopPullDownRefresh = function ({ success, fail, complete } = {}) {
19
+ const handle = new MethodHandler({ name: 'stopPullDownRefresh', success, fail, complete });
20
+ return new Promise((resolve, reject) => {
21
+ Taro.eventCenter.trigger('__taroStopPullDownRefresh', {
22
+ successHandler: (res = {}) => handle.success(res, resolve),
23
+ errorHandler: (res = {}) => handle.fail(res, reject)
24
+ });
25
+ });
26
+ };
@@ -0,0 +1,83 @@
1
+ import { Current } from '@tarojs/runtime';
2
+ import { MethodHandler } from '../../utils/handler';
3
+ import { getTimingFunc, easeInOut } from '../../utils';
4
+ let timer;
5
+ const FRAME_DURATION = 17;
6
+ /**
7
+ * 将页面滚动到目标位置
8
+ */
9
+ export const pageScrollTo = ({ scrollTop, selector = '', duration = 300, success, fail, complete }) => {
10
+ let scrollFunc;
11
+ const handle = new MethodHandler({ name: 'pageScrollTo', success, fail, complete });
12
+ return new Promise((resolve, reject) => {
13
+ var _a, _b;
14
+ try {
15
+ if (scrollTop === undefined && !selector) {
16
+ return handle.fail({
17
+ errMsg: 'scrollTop" 或 "selector" 需要其之一'
18
+ }, reject);
19
+ }
20
+ const id = (_b = (_a = Current.page) === null || _a === void 0 ? void 0 : _a.path) === null || _b === void 0 ? void 0 : _b.replace(/([^a-z0-9\u00a0-\uffff_-])/ig, '\\$1');
21
+ const el = (id
22
+ ? document.querySelector(`.taro_page#${id}`)
23
+ : document.querySelector('.taro_page') ||
24
+ document.querySelector('.taro_router'));
25
+ if (!scrollFunc) {
26
+ if (!el) {
27
+ scrollFunc = pos => {
28
+ if (pos === undefined) {
29
+ return window.pageYOffset;
30
+ }
31
+ else {
32
+ window.scrollTo(0, pos);
33
+ }
34
+ };
35
+ }
36
+ else {
37
+ scrollFunc = pos => {
38
+ if (pos === undefined) {
39
+ return el.scrollTop;
40
+ }
41
+ else {
42
+ el.scrollTop = pos;
43
+ }
44
+ };
45
+ }
46
+ }
47
+ if (scrollTop && selector) {
48
+ console.warn('"scrollTop" 或 "selector" 建议只设一个值,全部设置会忽略selector');
49
+ }
50
+ const from = scrollFunc();
51
+ let to;
52
+ if (typeof scrollTop === 'number') {
53
+ to = scrollTop;
54
+ }
55
+ else {
56
+ const el = document.querySelector(selector);
57
+ to = (el === null || el === void 0 ? void 0 : el.offsetTop) || 0;
58
+ }
59
+ const delta = to - from;
60
+ const frameCnt = duration / FRAME_DURATION;
61
+ const easeFunc = getTimingFunc(easeInOut, frameCnt);
62
+ const scroll = (frame = 0) => {
63
+ const dest = from + delta * easeFunc(frame);
64
+ scrollFunc(dest);
65
+ if (frame < frameCnt) {
66
+ timer && clearTimeout(timer);
67
+ timer = setTimeout(() => {
68
+ scroll(frame + 1);
69
+ }, FRAME_DURATION);
70
+ }
71
+ else {
72
+ return handle.success({}, resolve);
73
+ }
74
+ };
75
+ scroll();
76
+ }
77
+ catch (e) {
78
+ return handle.fail({
79
+ errMsg: e.message
80
+ }, reject);
81
+ }
82
+ });
83
+ };
@@ -0,0 +1,3 @@
1
+ import { temporarilyNotSupport } from '../utils';
2
+ // 置顶
3
+ export const setTopBarText = temporarilyNotSupport('setTopBarText');
@@ -0,0 +1,282 @@
1
+ import Taro from '@tarojs/api';
2
+ import { shouldBeObject, getParameterError, isValidColor } from '../utils';
3
+ import { MethodHandler } from '../utils/handler';
4
+ let tabConf;
5
+ export function initTabBarApis(config = {}) {
6
+ tabConf = config.tabBar;
7
+ }
8
+ /**
9
+ * 显示 tabBar 某一项的右上角的红点
10
+ */
11
+ export const showTabBarRedDot = (options) => {
12
+ // options must be an Object
13
+ const isObject = shouldBeObject(options);
14
+ if (!isObject.flag) {
15
+ const res = { errMsg: `showTabBarRedDot:fail ${isObject.msg}` };
16
+ console.error(res.errMsg);
17
+ return Promise.reject(res);
18
+ }
19
+ const { index, success, fail, complete } = options;
20
+ const handle = new MethodHandler({ name: 'showTabBarRedDot', success, fail, complete });
21
+ if (typeof index !== 'number') {
22
+ return handle.fail({
23
+ errMsg: getParameterError({
24
+ para: 'index',
25
+ correct: 'Number',
26
+ wrong: index
27
+ })
28
+ });
29
+ }
30
+ return new Promise((resolve, reject) => {
31
+ Taro.eventCenter.trigger('__taroShowTabBarRedDotHandler', {
32
+ index,
33
+ successHandler: (res = {}) => handle.success(res, resolve),
34
+ errorHandler: (res = {}) => handle.fail(res, reject)
35
+ });
36
+ });
37
+ };
38
+ /**
39
+ * 显示 tabBar
40
+ */
41
+ export const showTabBar = (options = {}) => {
42
+ // options must be an Object
43
+ const isObject = shouldBeObject(options);
44
+ if (!isObject.flag) {
45
+ const res = { errMsg: `showTabBar:fail ${isObject.msg}` };
46
+ console.error(res.errMsg);
47
+ return Promise.reject(res);
48
+ }
49
+ const { animation, success, fail, complete } = options;
50
+ const handle = new MethodHandler({ name: 'showTabBar', success, fail, complete });
51
+ if (options.hasOwnProperty('animation') && typeof animation !== 'boolean') {
52
+ return handle.fail({
53
+ errMsg: getParameterError({
54
+ para: 'animation',
55
+ correct: 'Boolean',
56
+ wrong: animation
57
+ })
58
+ });
59
+ }
60
+ return new Promise((resolve, reject) => {
61
+ Taro.eventCenter.trigger('__taroShowTabBar', {
62
+ animation,
63
+ successHandler: (res = {}) => handle.success(res, resolve),
64
+ errorHandler: (res = {}) => handle.fail(res, reject)
65
+ });
66
+ });
67
+ };
68
+ /**
69
+ * 动态设置 tabBar 的整体样式
70
+ */
71
+ export const setTabBarStyle = (options = {}) => {
72
+ // options must be an Object
73
+ const isObject = shouldBeObject(options);
74
+ if (!isObject.flag) {
75
+ const res = { errMsg: `setTabBarStyle:fail ${isObject.msg}` };
76
+ console.error(res.errMsg);
77
+ return Promise.reject(res);
78
+ }
79
+ const { color, selectedColor, backgroundColor, borderStyle, success, fail, complete } = options;
80
+ const handle = new MethodHandler({ name: 'setTabBarStyle', success, fail, complete });
81
+ let errMsg;
82
+ if (color && !isValidColor(color)) {
83
+ errMsg = 'color';
84
+ }
85
+ else if (selectedColor && !isValidColor(selectedColor)) {
86
+ errMsg = 'selectedColor';
87
+ }
88
+ else if (backgroundColor && !isValidColor(backgroundColor)) {
89
+ errMsg = 'backgroundColor';
90
+ }
91
+ else if (borderStyle && !/^(black|white)$/.test(borderStyle)) {
92
+ errMsg = 'borderStyle';
93
+ }
94
+ if (errMsg) {
95
+ return handle.fail({ errMsg: `invalid ${errMsg}` });
96
+ }
97
+ if (!tabConf) {
98
+ return handle.fail();
99
+ }
100
+ const obj = {};
101
+ if (color)
102
+ obj.color = color;
103
+ if (selectedColor)
104
+ obj.selectedColor = selectedColor;
105
+ if (backgroundColor)
106
+ obj.backgroundColor = backgroundColor;
107
+ if (borderStyle)
108
+ obj.borderStyle = borderStyle;
109
+ return new Promise((resolve, reject) => {
110
+ Taro.eventCenter.trigger('__taroSetTabBarStyle', {
111
+ color,
112
+ selectedColor,
113
+ backgroundColor,
114
+ borderStyle,
115
+ successHandler: (res = {}) => handle.success(res, resolve),
116
+ errorHandler: (res = {}) => handle.fail(res, reject)
117
+ });
118
+ });
119
+ };
120
+ /**
121
+ * 动态设置 tabBar 某一项的内容
122
+ */
123
+ export const setTabBarItem = (options) => {
124
+ // options must be an Object
125
+ const isObject = shouldBeObject(options);
126
+ if (!isObject.flag) {
127
+ const res = { errMsg: `setTabBarItem:fail ${isObject.msg}` };
128
+ console.error(res.errMsg);
129
+ return Promise.reject(res);
130
+ }
131
+ const { index, text, iconPath, selectedIconPath, success, fail, complete } = options;
132
+ const handle = new MethodHandler({ name: 'setTabBarItem', success, fail, complete });
133
+ if (typeof index !== 'number') {
134
+ return handle.fail({
135
+ errMsg: getParameterError({
136
+ para: 'index',
137
+ correct: 'Number',
138
+ wrong: index
139
+ })
140
+ });
141
+ }
142
+ return new Promise((resolve, reject) => {
143
+ Taro.eventCenter.trigger('__taroSetTabBarItem', {
144
+ index,
145
+ text,
146
+ iconPath,
147
+ selectedIconPath,
148
+ successHandler: (res = {}) => handle.success(res, resolve),
149
+ errorHandler: (res = {}) => handle.fail(res, reject)
150
+ });
151
+ });
152
+ };
153
+ /**
154
+ * 为 tabBar 某一项的右上角添加文本
155
+ */
156
+ export const setTabBarBadge = (options) => {
157
+ // options must be an Object
158
+ const isObject = shouldBeObject(options);
159
+ if (!isObject.flag) {
160
+ const res = { errMsg: `setTabBarBadge:fail ${isObject.msg}` };
161
+ console.error(res.errMsg);
162
+ return Promise.reject(res);
163
+ }
164
+ const { index, text, success, fail, complete } = options;
165
+ const handle = new MethodHandler({ name: 'setTabBarBadge', success, fail, complete });
166
+ if (typeof index !== 'number') {
167
+ return handle.fail({
168
+ errMsg: getParameterError({
169
+ para: 'index',
170
+ correct: 'Number',
171
+ wrong: index
172
+ })
173
+ });
174
+ }
175
+ if (typeof text !== 'string') {
176
+ return handle.fail({
177
+ errMsg: getParameterError({
178
+ para: 'text',
179
+ correct: 'String',
180
+ wrong: text
181
+ })
182
+ });
183
+ }
184
+ return new Promise((resolve, reject) => {
185
+ Taro.eventCenter.trigger('__taroSetTabBarBadge', {
186
+ index,
187
+ text,
188
+ successHandler: (res = {}) => handle.success(res, resolve),
189
+ errorHandler: (res = {}) => handle.fail(res, reject)
190
+ });
191
+ });
192
+ };
193
+ /**
194
+ * 移除 tabBar 某一项右上角的文本
195
+ */
196
+ export const removeTabBarBadge = (options) => {
197
+ // options must be an Object
198
+ const isObject = shouldBeObject(options);
199
+ if (!isObject.flag) {
200
+ const res = { errMsg: `removeTabBarBadge:fail ${isObject.msg}` };
201
+ console.error(res.errMsg);
202
+ return Promise.reject(res);
203
+ }
204
+ const { index, success, fail, complete } = options;
205
+ const handle = new MethodHandler({ name: 'removeTabBarBadge', success, fail, complete });
206
+ if (typeof index !== 'number') {
207
+ return handle.fail({
208
+ errMsg: getParameterError({
209
+ para: 'index',
210
+ correct: 'Number',
211
+ wrong: index
212
+ })
213
+ });
214
+ }
215
+ return new Promise((resolve, reject) => {
216
+ Taro.eventCenter.trigger('__taroRemoveTabBarBadge', {
217
+ index,
218
+ successHandler: (res = {}) => handle.success(res, resolve),
219
+ errorHandler: (res = {}) => handle.fail(res, reject)
220
+ });
221
+ });
222
+ };
223
+ /**
224
+ * 隐藏 tabBar 某一项的右上角的红点
225
+ */
226
+ export const hideTabBarRedDot = (options) => {
227
+ // options must be an Object
228
+ const isObject = shouldBeObject(options);
229
+ if (!isObject.flag) {
230
+ const res = { errMsg: `hideTabBarRedDot:fail ${isObject.msg}` };
231
+ console.error(res.errMsg);
232
+ return Promise.reject(res);
233
+ }
234
+ const { index, success, fail, complete } = options;
235
+ const handle = new MethodHandler({ name: 'hideTabBarRedDot', success, fail, complete });
236
+ if (typeof index !== 'number') {
237
+ return handle.fail({
238
+ errMsg: getParameterError({
239
+ para: 'index',
240
+ correct: 'Number',
241
+ wrong: index
242
+ })
243
+ });
244
+ }
245
+ return new Promise((resolve, reject) => {
246
+ Taro.eventCenter.trigger('__taroHideTabBarRedDotHandler', {
247
+ index,
248
+ successHandler: (res = {}) => handle.success(res, resolve),
249
+ errorHandler: (res = {}) => handle.fail(res, reject)
250
+ });
251
+ });
252
+ };
253
+ /**
254
+ * 隐藏 tabBar
255
+ */
256
+ export const hideTabBar = (options = {}) => {
257
+ // options must be an Object
258
+ const isObject = shouldBeObject(options);
259
+ if (!isObject.flag) {
260
+ const res = { errMsg: `hideTabBar:fail ${isObject.msg}` };
261
+ console.error(res.errMsg);
262
+ return Promise.reject(res);
263
+ }
264
+ const { animation, success, fail, complete } = options;
265
+ const handle = new MethodHandler({ name: 'hideTabBar', success, fail, complete });
266
+ if (options.hasOwnProperty('animation') && typeof animation !== 'boolean') {
267
+ return handle.fail({
268
+ errMsg: getParameterError({
269
+ para: 'animation',
270
+ correct: 'Boolean',
271
+ wrong: animation
272
+ })
273
+ });
274
+ }
275
+ return new Promise((resolve, reject) => {
276
+ Taro.eventCenter.trigger('__taroHideTabBar', {
277
+ animation,
278
+ successHandler: (res = {}) => handle.success(res, resolve),
279
+ errorHandler: (res = {}) => handle.fail(res, reject)
280
+ });
281
+ });
282
+ };
@@ -0,0 +1,31 @@
1
+ import { temporarilyNotSupport } from '../utils';
2
+ import { CallbackManager } from '../utils/handler';
3
+ const callbackManager = new CallbackManager();
4
+ const resizeListener = () => {
5
+ callbackManager.trigger({
6
+ windowWidth: window.screen.width,
7
+ windowHeight: window.screen.height
8
+ });
9
+ };
10
+ /**
11
+ * 设置窗口大小,该接口仅适用于 PC 平台,使用细则请参见指南
12
+ */
13
+ export const setWindowSize = temporarilyNotSupport('setWindowSize');
14
+ /**
15
+ * 监听窗口尺寸变化事件
16
+ */
17
+ export const onWindowResize = callback => {
18
+ callbackManager.add(callback);
19
+ if (callbackManager.count() === 1) {
20
+ window.addEventListener('resize', resizeListener);
21
+ }
22
+ };
23
+ /**
24
+ * 取消监听窗口尺寸变化事件
25
+ */
26
+ export const offWindowResize = callback => {
27
+ callbackManager.remove(callback);
28
+ if (callbackManager.count() === 0) {
29
+ window.removeEventListener('resize', resizeListener);
30
+ }
31
+ };
@@ -0,0 +1,80 @@
1
+ export class MethodHandler {
2
+ constructor({ name, success, fail, complete }) {
3
+ this.methodName = name;
4
+ this.__success = success;
5
+ this.__fail = fail;
6
+ this.__complete = complete;
7
+ }
8
+ success(res = {}, resolve = Promise.resolve.bind(Promise)) {
9
+ if (!res.errMsg) {
10
+ res.errMsg = `${this.methodName}:ok`;
11
+ }
12
+ typeof this.__success === 'function' && this.__success(res);
13
+ typeof this.__complete === 'function' && this.__complete(res);
14
+ return resolve(res);
15
+ }
16
+ fail(res = {}, reject = Promise.reject.bind(Promise)) {
17
+ if (!res.errMsg) {
18
+ res.errMsg = `${this.methodName}:fail`;
19
+ }
20
+ else {
21
+ res.errMsg = `${this.methodName}:fail ${res.errMsg}`;
22
+ }
23
+ console.error(res.errMsg);
24
+ typeof this.__fail === 'function' && this.__fail(res);
25
+ typeof this.__complete === 'function' && this.__complete(res);
26
+ return reject(res);
27
+ }
28
+ }
29
+ export class CallbackManager {
30
+ constructor() {
31
+ this.callbacks = [];
32
+ /**
33
+ * 添加回调
34
+ * @param {{ callback: function, ctx: any } | function} opt
35
+ */
36
+ this.add = (opt) => {
37
+ if (opt)
38
+ this.callbacks.push(opt);
39
+ };
40
+ /**
41
+ * 移除回调
42
+ * @param {{ callback: function, ctx: any } | function} opt
43
+ */
44
+ this.remove = (opt) => {
45
+ if (opt) {
46
+ let pos = -1;
47
+ this.callbacks.forEach((callback, k) => {
48
+ if (callback === opt) {
49
+ pos = k;
50
+ }
51
+ });
52
+ if (pos > -1) {
53
+ this.callbacks.splice(pos, 1);
54
+ }
55
+ }
56
+ };
57
+ /**
58
+ * 获取回调函数数量
59
+ * @return {number}
60
+ */
61
+ this.count = () => {
62
+ return this.callbacks.length;
63
+ };
64
+ /**
65
+ * 触发回调
66
+ * @param {...any} args 回调的调用参数
67
+ */
68
+ this.trigger = (...args) => {
69
+ this.callbacks.forEach(opt => {
70
+ if (typeof opt === 'function') {
71
+ opt(...args);
72
+ }
73
+ else {
74
+ const { callback, ctx } = opt;
75
+ typeof callback === 'function' && callback.call(ctx, ...args);
76
+ }
77
+ });
78
+ };
79
+ }
80
+ }