@nutui/nutui-react-taro 1.4.4 → 1.4.5-beta.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 (219) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/esm/Address.js +5 -5
  3. package/dist/esm/Audio.js +5 -5
  4. package/dist/esm/AvatarContext-7153ad2b.js +3 -1
  5. package/dist/esm/AvatarGroup.js +4 -4
  6. package/dist/esm/Calendar.js +5 -5
  7. package/dist/esm/CalendarItem.js +4 -4
  8. package/dist/esm/Card.js +4 -3
  9. package/dist/esm/Cell.js +2 -2
  10. package/dist/esm/ConfigProvider.js +3 -3
  11. package/dist/esm/CountDown.js +4 -4
  12. package/dist/esm/DatePicker.js +5 -5
  13. package/dist/esm/Dialog.js +4 -4
  14. package/dist/esm/Ellipsis.js +4 -4
  15. package/dist/esm/Empty.js +4 -4
  16. package/dist/esm/FixedNav.js +4 -4
  17. package/dist/esm/Form.js +4 -4
  18. package/dist/esm/FormItem.js +3 -3
  19. package/dist/esm/Grid.js +4 -4
  20. package/dist/esm/GridItem.js +4 -4
  21. package/dist/esm/Image.js +4 -4
  22. package/dist/esm/Infiniteloading.js +4 -4
  23. package/dist/esm/Input.js +4 -4
  24. package/dist/esm/MenuItem.js +4 -4
  25. package/dist/esm/NoticeBar.js +2 -2
  26. package/dist/esm/NumberKeyboard.js +4 -4
  27. package/dist/esm/Pagination.js +4 -4
  28. package/dist/esm/Picker.js +4 -4
  29. package/dist/esm/PullToRefresh.js +4 -4
  30. package/dist/esm/Range.js +4 -4
  31. package/dist/esm/SearchBar.js +4 -4
  32. package/dist/esm/ShortPassword.js +4 -4
  33. package/dist/esm/SideNavBar.js +4 -4
  34. package/dist/esm/Signature.js +4 -4
  35. package/dist/esm/Sticky.js +4 -4
  36. package/dist/esm/Table.js +4 -4
  37. package/dist/esm/Tag.js +3 -2
  38. package/dist/esm/TextArea.js +4 -4
  39. package/dist/esm/TimeDetail.js +4 -4
  40. package/dist/esm/TimePannel.js +4 -4
  41. package/dist/esm/TimeSelect.js +6 -6
  42. package/dist/esm/Uploader.js +4 -4
  43. package/dist/esm/UserContext-68f62e66.js +3 -1
  44. package/dist/esm/UserContext-b4181162.js +3 -1
  45. package/dist/esm/UserContext-be8097d2.js +3 -1
  46. package/dist/esm/VirtualList.js +6 -4
  47. package/dist/esm/WaterMark.js +4 -4
  48. package/dist/esm/actionsheet.taro-a58d3d12.js +45 -83
  49. package/dist/esm/address.taro-79cc7c96.js +461 -0
  50. package/dist/esm/animate.taro-b0e83dd5.js +32 -46
  51. package/dist/esm/animatingnumbers.taro-6f40a2e9.js +93 -134
  52. package/dist/esm/audio.taro-4fadc583.js +161 -0
  53. package/dist/esm/avatar.taro-85ced995.js +93 -119
  54. package/dist/esm/avatargroup-1d900174.js +34 -0
  55. package/dist/esm/backtop.taro-99107c30.js +39 -62
  56. package/dist/esm/badge.taro-fe9171ec.js +40 -58
  57. package/dist/esm/barrage.taro-0e157b5e.js +61 -91
  58. package/dist/esm/bem-893ad28d.js +3 -6
  59. package/dist/esm/button.taro-4ce133b9.js +87 -98
  60. package/dist/esm/calendar.taro-4ed72058.js +38 -0
  61. package/dist/esm/calendaritem.taro-1ebe428d.js +571 -0
  62. package/dist/esm/card.taro-39055e82.js +32 -0
  63. package/dist/esm/cascader.taro-d8cb1c3e.js +397 -636
  64. package/dist/esm/cell.taro-9a04a92e.js +64 -0
  65. package/dist/esm/cellgroup.taro-e094471c.js +18 -27
  66. package/dist/esm/checkbox.taro-0bda9796.js +160 -232
  67. package/dist/esm/circleprogress.taro-47db537c.js +99 -120
  68. package/dist/esm/col.taro-b61c7cba.js +33 -50
  69. package/dist/esm/collapse.taro-af58206c.js +73 -86
  70. package/dist/esm/collapseitem-ce1849d2.js +75 -139
  71. package/dist/esm/configprovider-5eea4f5d.js +19 -0
  72. package/dist/esm/configprovider.taro-26882dd2.js +42 -0
  73. package/dist/esm/countdown.taro-9e40de9c.js +225 -0
  74. package/dist/esm/datepicker.taro-7220e495.js +270 -0
  75. package/dist/esm/dialog.taro-1c03960e.js +123 -0
  76. package/dist/esm/divider.taro-5236fe6a.js +27 -27
  77. package/dist/esm/drag.taro-82b6b27a.js +99 -138
  78. package/dist/esm/elevator.taro-d7d65470.js +185 -259
  79. package/dist/esm/ellipsis.taro-49b6db0c.js +232 -0
  80. package/dist/esm/empty.taro-7bd813f9.js +62 -0
  81. package/dist/esm/fixednav.taro-5ad15202.js +53 -0
  82. package/dist/esm/form.taro-71d32671.js +179 -0
  83. package/dist/esm/formitem.taro-3089489b.js +89 -0
  84. package/dist/esm/grid.taro-e6decfce.js +58 -0
  85. package/dist/esm/grid.taro.context-39636af9.js +4 -2
  86. package/dist/esm/griditem.taro-4cade72e.js +90 -0
  87. package/dist/esm/icon-8dc4de10.js +43 -51
  88. package/dist/esm/icon.taro-1d0d4fb7.js +43 -51
  89. package/dist/esm/image.taro-e6dc5867.js +64 -0
  90. package/dist/esm/imagepreview.taro-3400ea03.js +158 -205
  91. package/dist/esm/index.taro-a36f96fb.js +149 -210
  92. package/dist/esm/indicator.taro-183ea169.js +29 -43
  93. package/dist/esm/infiniteloading.taro-6c2a2e95.js +142 -0
  94. package/dist/esm/input.taro-fd566407.js +243 -0
  95. package/dist/esm/inputnumber.taro-dc39b853.js +129 -177
  96. package/dist/esm/layout.taro-358f014f.js +6 -9
  97. package/dist/esm/menu.taro-4abed328.js +89 -132
  98. package/dist/esm/menuitem.taro-6e8b27c3.js +130 -0
  99. package/dist/esm/navbar.taro-c931c078.js +69 -105
  100. package/dist/esm/noticebar.taro-69ea7673.js +450 -0
  101. package/dist/esm/notify.taro-308e5892.js +66 -97
  102. package/dist/esm/numberkeyboard.taro-194519e4.js +158 -0
  103. package/dist/esm/nutui-react.es.js +44 -44
  104. package/dist/esm/offsetContext-bfb02c25.js +3 -1
  105. package/dist/esm/overlay.taro-98367bc1.js +59 -74
  106. package/dist/esm/pagination.taro-bb490de9.js +124 -0
  107. package/dist/esm/picker.taro-2a8ded7c.js +420 -0
  108. package/dist/esm/popover.taro-46d813e8.js +132 -222
  109. package/dist/esm/popup.taro-cb777e09.js +125 -178
  110. package/dist/esm/price.taro-8801462e.js +75 -86
  111. package/dist/esm/progress.taro-623bc807.js +84 -118
  112. package/dist/esm/pulltorefresh.taro-cab7b51c.js +221 -0
  113. package/dist/esm/range.taro-5d6ff217.js +332 -0
  114. package/dist/esm/rate.taro-10197384.js +64 -111
  115. package/dist/esm/row.taro-37a895de.js +38 -42
  116. package/dist/esm/searchbar.taro-839dd622.js +148 -0
  117. package/dist/esm/shortpassword.taro-182d46f7.js +111 -0
  118. package/dist/esm/sidenavbar.taro-006cf38b.js +35 -0
  119. package/dist/esm/sidenavbaritem.taro-fee11d26.js +9 -22
  120. package/dist/esm/signature.taro-33632585.js +143 -0
  121. package/dist/esm/skeleton.taro-853ce460.js +51 -88
  122. package/dist/esm/step.taro-1c94e067.js +49 -78
  123. package/dist/esm/steps.taro-acf205a0.js +21 -30
  124. package/dist/esm/sticky.taro-d0553f48.js +13 -0
  125. package/dist/esm/subsidenavbar.taro-f46b4c73.js +58 -75
  126. package/dist/esm/swipe.taro-83bc248f.js +164 -254
  127. package/dist/esm/swiper.taro-852f6615.js +424 -505
  128. package/dist/esm/swiperitem-86a3578a.js +20 -28
  129. package/dist/esm/switch.taro-bae2dca0.js +43 -64
  130. package/dist/esm/tabbar.taro-86cece39.js +47 -57
  131. package/dist/esm/tabbaritem.taro-8dfb8055.js +51 -79
  132. package/dist/esm/table.taro-cb4dd2c3.js +92 -0
  133. package/dist/esm/tabpane.taro-91cd6cf4.js +17 -22
  134. package/dist/esm/tabs.taro-e71875fa.js +121 -165
  135. package/dist/esm/tag.taro-00fe554d.js +89 -0
  136. package/dist/esm/textarea.taro-42600f8c.js +74 -0
  137. package/dist/esm/timedetail.taro-c5f564fd.js +44 -0
  138. package/dist/esm/timepannel.taro-29f9dd86.js +22 -0
  139. package/dist/esm/timeselect.taro-3ecce65d.js +133 -0
  140. package/dist/esm/toast.taro-0804b6b4.js +99 -137
  141. package/dist/esm/trendarrow.taro-5a7153e4.js +63 -90
  142. package/dist/esm/types/src/packages/cell/cell.taro.d.ts +0 -1
  143. package/dist/esm/types/src/packages/noticebar/noticebar.d.ts +5 -4
  144. package/dist/esm/types/src/packages/noticebar/noticebar.taro.d.ts +5 -4
  145. package/dist/esm/types/src/packages/uploader/uploader.d.ts +1 -1
  146. package/dist/esm/types/src/packages/virtuallist/virtuallist.taro.d.ts +13 -2
  147. package/dist/esm/typings-1c5f2628.js +7 -6
  148. package/dist/esm/uploader.taro-f80d76d9.js +392 -0
  149. package/dist/esm/useClientRect-bf69d7b3.js +5 -25
  150. package/dist/esm/useTouch-a2ea68c6.js +63 -93
  151. package/dist/esm/video-8a3518c5.js +59 -83
  152. package/dist/esm/virtuallist.taro-e3345ced.js +215 -0
  153. package/dist/esm/watermark.taro-cd9db98a.js +114 -0
  154. package/dist/esm/zh-CN-dfc384d0.js +128 -133
  155. package/dist/locales/base.js +1 -1
  156. package/dist/locales/en-US.js +1 -1
  157. package/dist/locales/id-ID.js +1 -1
  158. package/dist/locales/zh-CN.js +1 -1
  159. package/dist/locales/zh-TW.js +1 -1
  160. package/dist/locales/zh-UG.js +1 -1
  161. package/dist/nutui.react.es.js +634 -5664
  162. package/dist/nutui.react.umd.js +634 -5664
  163. package/dist/packages/noticebar/noticebar.scss +17 -0
  164. package/dist/packages/radio/radio.scss +3 -1
  165. package/dist/packages/row/row.scss +2 -0
  166. package/dist/packages/searchbar/searchbar.scss +1 -1
  167. package/dist/packages/tag/tag.scss +13 -5
  168. package/dist/packages/virtuallist/virtuallist.scss +24 -0
  169. package/dist/style.css +1 -1
  170. package/dist/style.es.js +1 -1
  171. package/dist/styles/temp.scss +2340 -0
  172. package/dist/styles/theme-dark.scss +7 -0
  173. package/dist/styles/theme-default.scss +11 -0
  174. package/dist/styles/variables.scss +1945 -710
  175. package/dist/types/index.d.ts +16 -23
  176. package/package.json +9 -4
  177. package/dist/esm/address.taro-1e2aea24.js +0 -615
  178. package/dist/esm/audio.taro-fddcdfc0.js +0 -228
  179. package/dist/esm/avatargroup-f7f600ff.js +0 -42
  180. package/dist/esm/calendar.taro-72974415.js +0 -83
  181. package/dist/esm/calendaritem.taro-84e889eb.js +0 -580
  182. package/dist/esm/card.taro-a530dfb3.js +0 -61
  183. package/dist/esm/cell.taro-cf50c4f2.js +0 -109
  184. package/dist/esm/configprovider-c7d60e20.js +0 -18
  185. package/dist/esm/configprovider.taro-8bdb3a28.js +0 -50
  186. package/dist/esm/countdown.taro-d7dc8681.js +0 -246
  187. package/dist/esm/datepicker.taro-7199f521.js +0 -304
  188. package/dist/esm/dialog.taro-f54cfbf0.js +0 -187
  189. package/dist/esm/ellipsis.taro-c0de6ff4.js +0 -309
  190. package/dist/esm/empty.taro-dbc66496.js +0 -81
  191. package/dist/esm/fixednav.taro-9e759320.js +0 -97
  192. package/dist/esm/form.taro-880014b1.js +0 -181
  193. package/dist/esm/formitem.taro-3695f4a7.js +0 -136
  194. package/dist/esm/grid.taro-c2cc12d6.js +0 -81
  195. package/dist/esm/griditem.taro-892153cd.js +0 -122
  196. package/dist/esm/image.taro-c30973d5.js +0 -105
  197. package/dist/esm/infiniteloading.taro-b5ddf3cc.js +0 -188
  198. package/dist/esm/input.taro-104130c1.js +0 -361
  199. package/dist/esm/menuitem.taro-216e9f7d.js +0 -193
  200. package/dist/esm/noticebar.taro-94002898.js +0 -368
  201. package/dist/esm/numberkeyboard.taro-5e8f0ddf.js +0 -245
  202. package/dist/esm/pagination.taro-9925ffab.js +0 -169
  203. package/dist/esm/picker.taro-3b5cc054.js +0 -540
  204. package/dist/esm/pulltorefresh.taro-f26a20dd.js +0 -302
  205. package/dist/esm/range.taro-c41e9b90.js +0 -469
  206. package/dist/esm/searchbar.taro-01ed4ea4.js +0 -236
  207. package/dist/esm/shortpassword.taro-3a3bf412.js +0 -190
  208. package/dist/esm/sidenavbar.taro-06026f31.js +0 -66
  209. package/dist/esm/signature.taro-17648cac.js +0 -192
  210. package/dist/esm/sticky.taro-36013e97.js +0 -16
  211. package/dist/esm/table.taro-adda6622.js +0 -139
  212. package/dist/esm/tag.taro-bd900990.js +0 -104
  213. package/dist/esm/textarea.taro-83d5fe73.js +0 -102
  214. package/dist/esm/timedetail.taro-105f5380.js +0 -68
  215. package/dist/esm/timepannel.taro-c66c63dd.js +0 -30
  216. package/dist/esm/timeselect.taro-fc7ec6ee.js +0 -172
  217. package/dist/esm/uploader.taro-a1edf38f.js +0 -529
  218. package/dist/esm/virtuallist.taro-4add61c3.js +0 -315
  219. package/dist/esm/watermark.taro-323d1cf3.js +0 -132
@@ -1,214 +1,167 @@
1
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
5
1
  import React__default, { useRef, useState, useEffect } from 'react';
6
2
  import { P as Popup } from './popup.taro-cb777e09.js';
7
3
  import { S as Swiper } from './swiper.taro-852f6615.js';
8
4
  import { S as SwiperItem } from './swiperitem-86a3578a.js';
9
- var defaultProps = {
10
- images: [],
11
- videos: [],
12
- show: false,
13
- autoplay: 3000,
14
- initNo: 1,
15
- contentClose: false,
16
- paginationVisible: false,
17
- paginationColor: '#fff',
18
- onClose: function onClose() {}
5
+
6
+ const defaultProps = {
7
+ images: [],
8
+ videos: [],
9
+ show: false,
10
+ autoplay: 3000,
11
+ initNo: 1,
12
+ contentClose: false,
13
+ paginationVisible: false,
14
+ paginationColor: '#fff',
15
+ onClose: () => { },
19
16
  };
20
- var ImagePreview = function ImagePreview(props) {
21
- var images = props.images,
22
- videos = props.videos,
23
- show = props.show,
24
- initNo = props.initNo,
25
- paginationColor = props.paginationColor,
26
- paginationVisible = props.paginationVisible,
27
- autoplay = props.autoplay,
28
- contentClose = props.contentClose,
29
- onClose = props.onClose;
30
- var nutImagePreview = useRef(null);
31
- var _useState = useState(false),
32
- _useState2 = _slicedToArray(_useState, 2),
33
- showPop = _useState2[0],
34
- setShowPop = _useState2[1];
35
- var _useState3 = useState(1),
36
- _useState4 = _slicedToArray(_useState3, 2),
37
- active = _useState4[0],
38
- setActive = _useState4[1];
39
- var _useState5 = useState(1),
40
- _useState6 = _slicedToArray(_useState5, 2),
41
- maxNo = _useState6[0],
42
- setMaxNo = _useState6[1];
43
- var _useState7 = useState({
44
- scale: 1,
45
- moveable: false
46
- }),
47
- _useState8 = _slicedToArray(_useState7, 2),
48
- store = _useState8[0],
49
- setStore = _useState8[1];
50
- var _useState9 = useState(0),
51
- _useState10 = _slicedToArray(_useState9, 2),
52
- lastTouchEndTime = _useState10[0],
53
- setLastTouchEndTime = _useState10[1]; // 用来辅助监听双击
54
- var onTouchStart = function onTouchStart(event) {
55
- var touches = event.touches;
56
- var events = touches[0];
57
- var events2 = touches[1];
58
- // 如果已经放大,双击应变回原尺寸;如果是原尺寸,双击应放大
59
- var curTouchTime = new Date().getTime();
60
- if (curTouchTime - lastTouchEndTime < 300) {
61
- var _store = store;
62
- if (_store.scale > 1) {
63
- _store.scale = 1;
64
- } else if (_store.scale === 1) {
65
- _store.scale = 2;
66
- }
67
- scaleNow();
68
- }
69
- var store1 = store;
70
- store1.moveable = true;
71
- if (events2) {
72
- // 如果开始两指操作,记录初始时刻两指间的距离
73
- store1.oriDistance = getDistance({
74
- x: events.pageX,
75
- y: events.pageY
76
- }, {
77
- x: events2.pageX,
78
- y: events2.pageY
79
- });
80
- }
81
- // 取到开始两指操作时的放大(缩小比例),store.scale 存储的是当前的放缩比(相对于标准大小 scale 为 1 的情况的放大缩小比)
82
- store1.originScale = store1.scale || 1;
83
- };
84
- var onTouchMove = function onTouchMove(event) {
85
- var touches = event.touches;
86
- var events = touches[0];
87
- var events2 = touches[1];
88
- if (!store.moveable) {
89
- return;
90
- }
91
- var store1 = store;
92
- // 双指移动
93
- if (events2) {
94
- // 获得当前两点间的距离
95
- var curDistance = getDistance({
96
- x: events.pageX,
97
- y: events.pageY
98
- }, {
99
- x: events2.pageX,
100
- y: events2.pageY
101
- });
102
- /** 此处计算倍数,距离放大(缩小) k 倍则 scale 也 扩大(缩小) k 倍。距离放大(缩小)倍数 = 结束时两点距离 除以 开始时两点距离
103
- * 注意此处的 scale 变化是基于 store.scale 的。
104
- * store.scale 是一个暂存值,比如第一次放大 2 倍,则 store.scale 为 2。
105
- * 再次两指触碰的时候,store.originScale 就为 store.scale 的值,基于此时的 store.scale 继续放大缩小。 * */
106
- var curScale = curDistance / store1.oriDistance;
107
- store1.scale = store1.originScale * curScale;
108
- // 最大放大 3 倍,缩小后松手要弹回原比例
109
- if (store1.scale > 3) {
110
- store1.scale = 3;
111
- }
112
- scaleNow();
113
- }
114
- };
115
- var onTouchEnd = function onTouchEnd() {
116
- setLastTouchEndTime(new Date().getTime());
117
- var store1 = store;
118
- store1.moveable = false;
119
- if (store1.scale < 1.1 && store1.scale > 1 || store1.scale < 1) {
120
- store1.scale = 1;
121
- scaleNow();
122
- }
123
- };
124
- var init = function init() {
125
- document.addEventListener('touchmove', onTouchMove);
126
- document.addEventListener('touchend', onTouchEnd);
127
- document.addEventListener('touchcancel', onTouchEnd);
128
- };
129
- useEffect(function () {
130
- if (show !== undefined) {
131
- setShowPop(show);
132
- init();
133
- }
134
- }, [show]);
135
- useEffect(function () {
136
- if (initNo !== undefined) {
137
- setActive(initNo);
138
- }
139
- if (show !== undefined) {
140
- setShowPop(show);
141
- }
142
- if (images && videos) {
143
- setMaxNo(images.length + videos.length);
144
- }
145
- }, []);
146
- var scaleNow = function scaleNow() {
147
- if (nutImagePreview.current) {
148
- nutImagePreview.current.style.transform = "scale(".concat(store.scale, ")");
149
- }
150
- };
151
- var onCloseInner = function onCloseInner() {
152
- setShowPop(false);
153
- setActive(1);
154
- scaleNow();
155
- onClose && onClose();
156
- setStore(_objectSpread(_objectSpread({}, store), {}, {
157
- scale: 1
158
- }));
159
- };
160
- // 计算两个点的距离
161
- var getDistance = function getDistance(first, second) {
162
- // 计算两个点起始时刻的距离和终止时刻的距离,终止时刻距离变大了则放大,变小了则缩小
163
- // 放大 k 倍则 scale 也 扩大 k 倍
164
- return Math.hypot(Math.abs(second.x - first.x), Math.abs(second.y - first.y));
165
- };
166
- var slideChangeEnd = function slideChangeEnd(page) {
167
- setActive(page + 1);
168
- };
169
- var closeOnImg = function closeOnImg() {
170
- // 点击内容区域的图片是否可以关闭弹层(视频区域由于nut-video做了限制,无法关闭弹层)
171
- if (contentClose) {
172
- onCloseInner();
173
- }
174
- };
175
- return React__default.createElement(Popup, {
176
- visible: showPop,
177
- popClass: "custom-pop",
178
- style: {
179
- width: '100%'
180
- },
181
- onClick: onCloseInner
182
- }, React__default.createElement("div", {
183
- className: "nut-imagepreview",
184
- ref: nutImagePreview,
185
- onClick: closeOnImg,
186
- onTouchStart: onTouchStart
187
- }, React__default.createElement(Swiper, {
188
- autoPlay: autoplay,
189
- className: "nut-imagepreview-swiper",
190
- loop: true,
191
- isPreventDefault: false,
192
- style: {
193
- display: showPop ? 'block' : 'none'
194
- },
195
- direction: "horizontal",
196
- onChange: slideChangeEnd,
197
- initPage: initNo && (initNo > maxNo ? maxNo - 1 : initNo - 1),
198
- paginationColor: paginationColor,
199
- paginationVisible: paginationVisible
200
- }, images && images.length > 0 ? images.map(function (item, index) {
201
- return React__default.createElement(SwiperItem, {
202
- key: index
203
- }, React__default.createElement("img", {
204
- src: item.src,
205
- alt: "",
206
- className: "nut-imagepreview-img"
207
- }));
208
- }) : [])), React__default.createElement("div", {
209
- className: "nut-imagepreview-index"
210
- }, active, "/", (images ? images.length : 0) + (videos ? videos.length : 0)));
17
+ const ImagePreview = (props) => {
18
+ const { images, videos, show, initNo, paginationColor, paginationVisible, autoplay, contentClose, onClose, } = props;
19
+ const nutImagePreview = useRef(null);
20
+ const [showPop, setShowPop] = useState(false);
21
+ const [active, setActive] = useState(1);
22
+ const [maxNo, setMaxNo] = useState(1);
23
+ const [store, setStore] = useState({
24
+ scale: 1,
25
+ moveable: false,
26
+ });
27
+ const [lastTouchEndTime, setLastTouchEndTime] = useState(0); // 用来辅助监听双击
28
+ const onTouchStart = (event) => {
29
+ const touches = event.touches;
30
+ const events = touches[0];
31
+ const events2 = touches[1];
32
+ // 如果已经放大,双击应变回原尺寸;如果是原尺寸,双击应放大
33
+ const curTouchTime = new Date().getTime();
34
+ if (curTouchTime - lastTouchEndTime < 300) {
35
+ const store1 = store;
36
+ if (store1.scale > 1) {
37
+ store1.scale = 1;
38
+ }
39
+ else if (store1.scale === 1) {
40
+ store1.scale = 2;
41
+ }
42
+ scaleNow();
43
+ }
44
+ const store1 = store;
45
+ store1.moveable = true;
46
+ if (events2) {
47
+ // 如果开始两指操作,记录初始时刻两指间的距离
48
+ store1.oriDistance = getDistance({
49
+ x: events.pageX,
50
+ y: events.pageY,
51
+ }, {
52
+ x: events2.pageX,
53
+ y: events2.pageY,
54
+ });
55
+ }
56
+ // 取到开始两指操作时的放大(缩小比例),store.scale 存储的是当前的放缩比(相对于标准大小 scale 为 1 的情况的放大缩小比)
57
+ store1.originScale = store1.scale || 1;
58
+ };
59
+ const onTouchMove = (event) => {
60
+ const touches = event.touches;
61
+ const events = touches[0];
62
+ const events2 = touches[1];
63
+ if (!store.moveable) {
64
+ return;
65
+ }
66
+ const store1 = store;
67
+ // 双指移动
68
+ if (events2) {
69
+ // 获得当前两点间的距离
70
+ const curDistance = getDistance({
71
+ x: events.pageX,
72
+ y: events.pageY,
73
+ }, {
74
+ x: events2.pageX,
75
+ y: events2.pageY,
76
+ });
77
+ /** 此处计算倍数,距离放大(缩小) k 倍则 scale 也 扩大(缩小) k 倍。距离放大(缩小)倍数 = 结束时两点距离 除以 开始时两点距离
78
+ * 注意此处的 scale 变化是基于 store.scale 的。
79
+ * store.scale 是一个暂存值,比如第一次放大 2 倍,则 store.scale 2。
80
+ * 再次两指触碰的时候,store.originScale 就为 store.scale 的值,基于此时的 store.scale 继续放大缩小。 * */
81
+ const curScale = curDistance / store1.oriDistance;
82
+ store1.scale = store1.originScale * curScale;
83
+ // 最大放大 3 倍,缩小后松手要弹回原比例
84
+ if (store1.scale > 3) {
85
+ store1.scale = 3;
86
+ }
87
+ scaleNow();
88
+ }
89
+ };
90
+ const onTouchEnd = () => {
91
+ setLastTouchEndTime(new Date().getTime());
92
+ const store1 = store;
93
+ store1.moveable = false;
94
+ if ((store1.scale < 1.1 && store1.scale > 1) || store1.scale < 1) {
95
+ store1.scale = 1;
96
+ scaleNow();
97
+ }
98
+ };
99
+ const init = () => {
100
+ document.addEventListener('touchmove', onTouchMove);
101
+ document.addEventListener('touchend', onTouchEnd);
102
+ document.addEventListener('touchcancel', onTouchEnd);
103
+ };
104
+ useEffect(() => {
105
+ if (show !== undefined) {
106
+ setShowPop(show);
107
+ init();
108
+ }
109
+ }, [show]);
110
+ useEffect(() => {
111
+ if (initNo !== undefined) {
112
+ setActive(initNo);
113
+ }
114
+ if (show !== undefined) {
115
+ setShowPop(show);
116
+ }
117
+ if (images && videos) {
118
+ setMaxNo(images.length + videos.length);
119
+ }
120
+ }, []);
121
+ const scaleNow = () => {
122
+ if (nutImagePreview.current) {
123
+ nutImagePreview.current.style.transform = `scale(${store.scale})`;
124
+ }
125
+ };
126
+ const onCloseInner = () => {
127
+ setShowPop(false);
128
+ setActive(1);
129
+ scaleNow();
130
+ onClose && onClose();
131
+ setStore({
132
+ ...store,
133
+ scale: 1,
134
+ });
135
+ };
136
+ // 计算两个点的距离
137
+ const getDistance = (first, second) => {
138
+ // 计算两个点起始时刻的距离和终止时刻的距离,终止时刻距离变大了则放大,变小了则缩小
139
+ // 放大 k 倍则 scale 也 扩大 k 倍
140
+ return Math.hypot(Math.abs(second.x - first.x), Math.abs(second.y - first.y));
141
+ };
142
+ const slideChangeEnd = (page) => {
143
+ setActive(page + 1);
144
+ };
145
+ const closeOnImg = () => {
146
+ // 点击内容区域的图片是否可以关闭弹层(视频区域由于nut-video做了限制,无法关闭弹层)
147
+ if (contentClose) {
148
+ onCloseInner();
149
+ }
150
+ };
151
+ return (React__default.createElement(Popup, { visible: showPop, popClass: "custom-pop", style: { width: '100%' }, onClick: onCloseInner },
152
+ React__default.createElement("div", { className: "nut-imagepreview", ref: nutImagePreview, onClick: closeOnImg, onTouchStart: onTouchStart },
153
+ React__default.createElement(Swiper, { autoPlay: autoplay, className: "nut-imagepreview-swiper", loop: true, isPreventDefault: false, style: { display: showPop ? 'block' : 'none' }, direction: "horizontal", onChange: slideChangeEnd, initPage: initNo && (initNo > maxNo ? maxNo - 1 : initNo - 1), paginationColor: paginationColor, paginationVisible: paginationVisible }, images && images.length > 0
154
+ ? images.map((item, index) => {
155
+ return (React__default.createElement(SwiperItem, { key: index },
156
+ React__default.createElement("img", { src: item.src, alt: "", className: "nut-imagepreview-img" })));
157
+ })
158
+ : [])),
159
+ React__default.createElement("div", { className: "nut-imagepreview-index" },
160
+ active,
161
+ "/",
162
+ (images ? images.length : 0) + (videos ? videos.length : 0))));
211
163
  };
212
164
  ImagePreview.defaultProps = defaultProps;
213
165
  ImagePreview.displayName = 'NutImagePreview';
166
+
214
167
  export { ImagePreview as I };