@nutui/nutui 3.1.12-beta.1 → 3.1.14

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 (131) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +139 -37
  3. package/dist/nutui.d.ts +9 -2
  4. package/dist/nutui.es.js +4830 -2950
  5. package/dist/nutui.umd.js +4910 -2953
  6. package/dist/packages/_es/ActionSheet.js +12 -13
  7. package/dist/packages/_es/Address.js +64 -77
  8. package/dist/packages/_es/Avatar.js +5 -4
  9. package/dist/packages/_es/BackTop.js +109 -72
  10. package/dist/packages/_es/Badge.js +5 -4
  11. package/dist/packages/_es/Barrage.js +57 -63
  12. package/dist/packages/_es/Button.js +6 -5
  13. package/dist/packages/_es/Calendar.js +18 -27
  14. package/dist/packages/_es/Card.js +8 -7
  15. package/dist/packages/_es/Cascader.js +547 -0
  16. package/dist/packages/_es/Cell.js +13 -5
  17. package/dist/packages/_es/CellGroup.js +14 -7
  18. package/dist/packages/_es/Checkbox.js +3 -3
  19. package/dist/packages/_es/CheckboxGroup.js +4 -9
  20. package/dist/packages/_es/CircleProgress.js +46 -142
  21. package/dist/packages/_es/Col.js +5 -4
  22. package/dist/packages/_es/Collapse.js +10 -35
  23. package/dist/packages/_es/CollapseItem.js +35 -80
  24. package/dist/packages/_es/CountDown.js +7 -10
  25. package/dist/packages/_es/CountUp.js +33 -34
  26. package/dist/packages/_es/DatePicker.js +219 -451
  27. package/dist/packages/_es/Dialog.js +98 -46
  28. package/dist/packages/_es/Divider.js +6 -5
  29. package/dist/packages/_es/Drag.js +50 -76
  30. package/dist/packages/_es/Elevator.js +53 -81
  31. package/dist/packages/_es/Empty.js +74 -0
  32. package/dist/packages/_es/FixedNav.js +9 -8
  33. package/dist/packages/_es/Form.js +23 -9
  34. package/dist/packages/_es/FormItem.js +5 -4
  35. package/dist/packages/_es/Grid.js +12 -0
  36. package/dist/packages/_es/GridItem.js +149 -0
  37. package/dist/packages/_es/Icon.js +40 -6
  38. package/dist/packages/_es/ImagePreview.js +158 -44
  39. package/dist/packages/_es/Indicator.js +66 -0
  40. package/dist/packages/_es/InfiniteLoading.js +109 -95
  41. package/dist/packages/_es/Input.js +21 -22
  42. package/dist/packages/_es/InputNumber.js +18 -24
  43. package/dist/packages/_es/Layout.js +2 -2
  44. package/dist/packages/_es/Menu.js +14 -16
  45. package/dist/packages/_es/MenuItem.js +11 -9
  46. package/dist/packages/_es/Navbar.js +7 -7
  47. package/dist/packages/_es/NoticeBar.js +31 -46
  48. package/dist/packages/_es/Notify.js +166 -30
  49. package/dist/packages/_es/NumberKeyboard.js +7 -9
  50. package/dist/packages/_es/OverLay.js +29 -22
  51. package/dist/packages/_es/Pagination.js +9 -8
  52. package/dist/packages/_es/Picker.js +447 -61
  53. package/dist/packages/_es/Popover.js +34 -161
  54. package/dist/packages/_es/Popup.js +77 -17
  55. package/dist/packages/_es/Price.js +7 -18
  56. package/dist/packages/_es/Progress.js +12 -23
  57. package/dist/packages/_es/Radio.js +3 -3
  58. package/dist/packages/_es/RadioGroup.js +2 -2
  59. package/dist/packages/_es/Range.js +31 -38
  60. package/dist/packages/_es/Rate.js +35 -17
  61. package/dist/packages/_es/Row.js +5 -4
  62. package/dist/packages/_es/SearchBar.js +5 -7
  63. package/dist/packages/_es/ShortPassword.js +59 -89
  64. package/dist/packages/_es/Signature.js +71 -70
  65. package/dist/packages/_es/Skeleton.js +138 -0
  66. package/dist/packages/_es/Sku.js +43 -53
  67. package/dist/packages/_es/Step.js +8 -10
  68. package/dist/packages/_es/Steps.js +2 -2
  69. package/dist/packages/_es/Swipe.js +28 -43
  70. package/dist/packages/_es/Swiper.js +418 -17
  71. package/dist/packages/_es/SwiperItem.js +39 -14
  72. package/dist/packages/_es/Switch.js +47 -16
  73. package/dist/packages/_es/TabPane.js +5 -4
  74. package/dist/packages/_es/Tabbar.js +5 -4
  75. package/dist/packages/_es/TabbarItem.js +9 -8
  76. package/dist/packages/_es/Table.js +191 -0
  77. package/dist/packages/_es/Tabs.js +21 -23
  78. package/dist/packages/_es/Tag.js +6 -5
  79. package/dist/packages/_es/TextArea.js +12 -16
  80. package/dist/packages/_es/TimeDetail.js +5 -7
  81. package/dist/packages/_es/TimePannel.js +5 -7
  82. package/dist/packages/_es/TimeSelect.js +7 -12
  83. package/dist/packages/_es/Toast.js +178 -46
  84. package/dist/packages/_es/Uploader.js +149 -109
  85. package/dist/packages/_es/Video.js +405 -0
  86. package/dist/packages/_es/common.js +136 -0
  87. package/dist/packages/_es/component.js +1 -1
  88. package/dist/packages/_es/index.js +7 -58
  89. package/dist/packages/_es/index2.js +58 -43
  90. package/dist/packages/_es/index3.js +28 -411
  91. package/dist/packages/_es/plugin-vue_export-helper.js +13 -0
  92. package/dist/packages/_es/pxCheck.js +1 -1
  93. package/dist/packages/_es/raf.js +1 -1
  94. package/dist/packages/_es/util.js +1 -1
  95. package/dist/packages/cascader/index.scss +81 -0
  96. package/dist/packages/cellgroup/index.scss +9 -0
  97. package/dist/packages/dialog/index.scss +17 -0
  98. package/dist/packages/drag/index.scss +4 -0
  99. package/dist/packages/empty/index.scss +33 -0
  100. package/dist/packages/fixednav/index.scss +6 -1
  101. package/dist/packages/formitem/index.scss +4 -1
  102. package/dist/packages/grid/index.scss +10 -0
  103. package/dist/packages/griditem/index.scss +92 -0
  104. package/dist/packages/icon/index.scss +2 -1
  105. package/dist/packages/indicator/index.scss +48 -0
  106. package/dist/packages/numberkeyboard/index.scss +1 -1
  107. package/dist/packages/popover/index.scss +2 -2
  108. package/dist/packages/rate/index.scss +1 -0
  109. package/dist/packages/skeleton/index.scss +57 -0
  110. package/dist/packages/table/index.scss +81 -0
  111. package/dist/packages/tabs/index.scss +16 -0
  112. package/dist/packages/textarea/index.scss +1 -0
  113. package/dist/packages/timedetail/index.scss +1 -2
  114. package/dist/packages/timeselect/index.scss +3 -0
  115. package/dist/packages/toast/index.scss +6 -0
  116. package/dist/style.css +1 -1
  117. package/dist/style.es.js +2 -1
  118. package/dist/styles/font/config.json +2 -1
  119. package/dist/styles/font/demo_index.html +26 -3
  120. package/dist/styles/font/iconfont.css +7 -3
  121. package/dist/styles/font/iconfont.js +31 -32
  122. package/dist/styles/font/iconfont.json +7 -0
  123. package/dist/styles/font/iconfont.ttf +0 -0
  124. package/dist/styles/font/iconfont.woff +0 -0
  125. package/dist/styles/font/iconfont.woff2 +0 -0
  126. package/dist/styles/themes/default.scss +40 -33
  127. package/dist/styles/variables.scss +54 -1
  128. package/package.json +2 -3
  129. package/dist/packages/_es/commonProps.js +0 -30
  130. package/dist/packages/_es/index.taro.vue_vue&type=script&lang.js +0 -44
  131. package/dist/packages/_es/use-lock-scroll.js +0 -23
@@ -17,23 +17,28 @@ var __spreadValues = (a, b) => {
17
17
  return a;
18
18
  };
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- var __require = typeof require !== "undefined" ? require : (x) => {
21
- throw new Error('Dynamic require of "' + x + '" is not supported');
20
+ var __publicField = (obj, key, value) => {
21
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
22
+ return value;
22
23
  };
23
24
  /*!
24
- * @nutui/nutui v3.1.11 Wed Nov 24 2021 14:54:38 GMT+0800 (中国标准时间)
25
+ * @nutui/nutui v3.1.14 Wed Dec 22 2021 20:49:10 GMT+0800 (中国标准时间)
25
26
  * (c) 2021 @jdf2e.
26
27
  * Released under the MIT License.
27
28
  */
28
- import { toRefs, reactive, watch, resolveComponent, openBlock, createElementBlock, createVNode, withCtx, createBlock, Fragment, renderList, createElementVNode, createCommentVNode, toDisplayString } from "vue";
29
+ import { toRefs, reactive, watch, onMounted, resolveComponent, openBlock, createBlock, withCtx, createElementVNode, withModifiers, createElementBlock, Fragment, renderList, createVNode, createCommentVNode, toDisplayString, render, h } from "vue";
29
30
  import { c as createComponent } from "./component.js";
30
- import _sfc_main$1 from "./Popup.js";
31
- import "./use-lock-scroll.js";
31
+ import Popup from "./Popup.js";
32
+ import Video from "./Video.js";
33
+ import Swiper from "./Swiper.js";
34
+ import SwiperItem from "./SwiperItem.js";
35
+ import { _ as _export_sfc } from "./plugin-vue_export-helper.js";
32
36
  import "./OverLay.js";
33
- import "./index.taro.vue_vue&type=script&lang.js";
37
+ import "./Icon.js";
34
38
  import "./pxCheck.js";
39
+ import "./index.js";
35
40
  const { componentName, create } = createComponent("imagepreview");
36
- var _sfc_main = create({
41
+ const _sfc_main = create({
37
42
  props: {
38
43
  show: {
39
44
  type: Boolean,
@@ -42,21 +47,59 @@ var _sfc_main = create({
42
47
  images: {
43
48
  type: Array,
44
49
  default: () => []
50
+ },
51
+ videos: {
52
+ type: Array,
53
+ default: () => []
54
+ },
55
+ contentClose: {
56
+ type: Boolean,
57
+ default: false
58
+ },
59
+ initNo: {
60
+ type: Number,
61
+ default: 1
62
+ },
63
+ paginationVisible: {
64
+ type: Boolean,
65
+ default: false
66
+ },
67
+ paginationColor: {
68
+ type: String,
69
+ default: "#fff"
45
70
  }
46
71
  },
72
+ emits: ["close"],
47
73
  components: {
48
- [_sfc_main$1.name]: _sfc_main$1
74
+ [Popup.name]: Popup,
75
+ [Video.name]: Video,
76
+ [Swiper.name]: Swiper,
77
+ [SwiperItem.name]: SwiperItem
49
78
  },
50
79
  setup(props, { emit }) {
51
- const { value, images } = toRefs(props);
80
+ toRefs(props);
52
81
  const state = reactive({
53
- showPop: value,
54
- active: 1
82
+ showPop: false,
83
+ active: 1,
84
+ maxNo: 1,
85
+ source: {
86
+ src: "https://storage.jd.com/about/big-final.mp4?Expires=3730193075&AccessKey=3LoYX1dQWa6ZXzQl&Signature=ViMFjz%2BOkBxS%2FY1rjtUVqbopbJI%3D",
87
+ type: "video/mp4"
88
+ },
89
+ options: {
90
+ muted: true,
91
+ controls: true
92
+ }
55
93
  });
56
94
  const slideChangeEnd = function(page) {
57
- state.active = page.detail.current + 1;
95
+ state.active = page + 1;
96
+ };
97
+ const closeOnImg = () => {
98
+ if (props.contentClose) {
99
+ onClose();
100
+ }
58
101
  };
59
- const closePop = function() {
102
+ const onClose = () => {
60
103
  state.showPop = false;
61
104
  state.active = 1;
62
105
  emit("close");
@@ -64,55 +107,126 @@ var _sfc_main = create({
64
107
  watch(() => props.show, (val) => {
65
108
  state.showPop = val;
66
109
  });
110
+ onMounted(() => {
111
+ state.active = props.initNo;
112
+ state.showPop = props.show;
113
+ state.maxNo = props.images.length + props.videos.length;
114
+ });
67
115
  return __spreadProps(__spreadValues({}, toRefs(state)), {
68
116
  slideChangeEnd,
69
- closePop
117
+ onClose,
118
+ closeOnImg
70
119
  });
71
120
  }
72
121
  });
73
- const _hoisted_1 = { class: "nut-imagepreview" };
74
- const _hoisted_2 = ["src"];
75
- const _hoisted_3 = { class: "nut-imagepreview-index" };
122
+ const _hoisted_1 = ["src"];
123
+ const _hoisted_2 = { class: "nut-imagepreview-index" };
76
124
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
77
- const _component_swiper_item = resolveComponent("swiper-item");
78
- const _component_swiper = resolveComponent("swiper");
125
+ const _component_nut_video = resolveComponent("nut-video");
126
+ const _component_nut_swiper_item = resolveComponent("nut-swiper-item");
127
+ const _component_nut_swiper = resolveComponent("nut-swiper");
79
128
  const _component_nut_popup = resolveComponent("nut-popup");
80
- return openBlock(), createElementBlock("view", _hoisted_1, [
81
- createVNode(_component_nut_popup, {
82
- "pop-class": "custom-pop",
83
- visible: _ctx.showPop,
84
- "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => _ctx.showPop = $event),
85
- onClick: _ctx.closePop
86
- }, {
87
- default: withCtx(() => [
88
- _ctx.showPop ? (openBlock(), createBlock(_component_swiper, {
129
+ return openBlock(), createBlock(_component_nut_popup, {
130
+ "pop-class": "custom-pop",
131
+ visible: _ctx.showPop,
132
+ "onUpdate:visible": _cache[1] || (_cache[1] = ($event) => _ctx.showPop = $event),
133
+ onClick: _ctx.onClose
134
+ }, {
135
+ default: withCtx(() => [
136
+ createElementVNode("view", {
137
+ class: "nut-imagepreview",
138
+ onClick: _cache[0] || (_cache[0] = withModifiers((...args) => _ctx.closeOnImg && _ctx.closeOnImg(...args), ["stop"]))
139
+ }, [
140
+ _ctx.showPop ? (openBlock(), createBlock(_component_nut_swiper, {
89
141
  key: 0,
90
- autoplay: true,
91
- interval: 3e3,
142
+ "auto-play": 3e3,
92
143
  class: "nut-imagepreview-swiper",
93
- circular: true,
94
- onChange: _ctx.slideChangeEnd
144
+ loop: true,
145
+ "is-preventDefault": false,
146
+ direction: "horizontal",
147
+ onChange: _ctx.slideChangeEnd,
148
+ "init-page": _ctx.initNo > _ctx.maxNo ? _ctx.maxNo - 1 : _ctx.initNo - 1,
149
+ "pagination-visible": _ctx.paginationVisible,
150
+ "pagination-color": _ctx.paginationColor
95
151
  }, {
96
152
  default: withCtx(() => [
153
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.videos, (item, index) => {
154
+ return openBlock(), createBlock(_component_nut_swiper_item, { key: index }, {
155
+ default: withCtx(() => [
156
+ createVNode(_component_nut_video, {
157
+ source: item.source,
158
+ options: item.options
159
+ }, null, 8, ["source", "options"])
160
+ ]),
161
+ _: 2
162
+ }, 1024);
163
+ }), 128)),
97
164
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.images, (item, index) => {
98
- return openBlock(), createBlock(_component_swiper_item, { key: index }, {
165
+ return openBlock(), createBlock(_component_nut_swiper_item, { key: index }, {
99
166
  default: withCtx(() => [
100
167
  createElementVNode("img", {
101
- src: item.imgSrc,
168
+ src: item.src,
102
169
  class: "nut-imagepreview-img"
103
- }, null, 8, _hoisted_2)
170
+ }, null, 8, _hoisted_1)
104
171
  ]),
105
172
  _: 2
106
173
  }, 1024);
107
174
  }), 128))
108
175
  ]),
109
176
  _: 1
110
- }, 8, ["onChange"])) : createCommentVNode("", true),
111
- createElementVNode("view", _hoisted_3, toDisplayString(_ctx.active) + " / " + toDisplayString(_ctx.images.length), 1)
112
- ]),
113
- _: 1
114
- }, 8, ["visible", "onClick"])
115
- ]);
177
+ }, 8, ["onChange", "init-page", "pagination-visible", "pagination-color"])) : createCommentVNode("", true),
178
+ createElementVNode("view", _hoisted_2, toDisplayString(_ctx.active) + " / " + toDisplayString(_ctx.images.length + _ctx.videos.length), 1)
179
+ ])
180
+ ]),
181
+ _: 1
182
+ }, 8, ["visible", "onClick"]);
183
+ }
184
+ var ImagePreview = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
185
+ class ImagePreviewOptions {
186
+ constructor() {
187
+ __publicField(this, "show", false);
188
+ __publicField(this, "images", []);
189
+ __publicField(this, "initNo", 1);
190
+ __publicField(this, "paginationVisible", false);
191
+ __publicField(this, "paginationColor", "");
192
+ __publicField(this, "teleport", "body");
193
+ __publicField(this, "onClose", () => {
194
+ });
195
+ }
116
196
  }
117
- _sfc_main.render = _sfc_render;
118
- export { _sfc_main as default };
197
+ class ImagePreviewFunction {
198
+ constructor(_options) {
199
+ __publicField(this, "options", new ImagePreviewOptions());
200
+ let options = Object.assign(this.options, _options);
201
+ let elWarp = document.body;
202
+ let teleport = options.teleport;
203
+ if (teleport != "body") {
204
+ if (typeof teleport == "string") {
205
+ elWarp = document.querySelector(teleport);
206
+ } else {
207
+ elWarp = options.teleport;
208
+ }
209
+ }
210
+ const root = document.createElement("view");
211
+ root.id = "imagepreview-" + new Date().getTime();
212
+ const Wrapper = {
213
+ setup() {
214
+ options.teleport = `#${root.id}`;
215
+ return () => {
216
+ return h(ImagePreview, options);
217
+ };
218
+ }
219
+ };
220
+ const instance = createVNode(Wrapper);
221
+ elWarp.appendChild(root);
222
+ render(instance, root);
223
+ }
224
+ }
225
+ const _ImagePreview = function(options) {
226
+ return new ImagePreviewFunction(options);
227
+ };
228
+ _ImagePreview.install = (app) => {
229
+ app.use(ImagePreview);
230
+ app.config.globalProperties.$imagepreview = _ImagePreview;
231
+ };
232
+ export { ImagePreview, ImagePreviewOptions, _ImagePreview as default };
@@ -0,0 +1,66 @@
1
+ /*!
2
+ * @nutui/nutui v3.1.14 Wed Dec 22 2021 20:49:10 GMT+0800 (中国标准时间)
3
+ * (c) 2021 @jdf2e.
4
+ * Released under the MIT License.
5
+ */
6
+ import { toRefs, computed, openBlock, createElementBlock, normalizeClass, Fragment, renderList, toDisplayString } from "vue";
7
+ import { c as createComponent } from "./component.js";
8
+ import { _ as _export_sfc } from "./plugin-vue_export-helper.js";
9
+ const { componentName, create } = createComponent("indicator");
10
+ const _sfc_main = create({
11
+ props: {
12
+ size: {
13
+ type: Number,
14
+ default: 3,
15
+ required: true
16
+ },
17
+ current: {
18
+ type: Number,
19
+ default: 1,
20
+ required: true
21
+ },
22
+ block: {
23
+ type: Boolean,
24
+ default: false
25
+ },
26
+ align: {
27
+ type: String,
28
+ default: "center"
29
+ },
30
+ fillZero: {
31
+ type: Boolean,
32
+ default: true
33
+ }
34
+ },
35
+ setup(props) {
36
+ const { block, align } = toRefs(props);
37
+ const classes = computed(() => {
38
+ const prefixCls = componentName;
39
+ return {
40
+ [prefixCls]: true,
41
+ [`${prefixCls}--block`]: block.value,
42
+ [`${prefixCls}--align__${align.value}`]: block.value && align.value
43
+ };
44
+ });
45
+ return { classes, componentName };
46
+ }
47
+ });
48
+ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
49
+ return openBlock(), createElementBlock("view", {
50
+ class: normalizeClass(_ctx.classes)
51
+ }, [
52
+ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.size, (item) => {
53
+ return openBlock(), createElementBlock(Fragment, { key: item }, [
54
+ item === _ctx.current ? (openBlock(), createElementBlock("view", {
55
+ key: 0,
56
+ class: normalizeClass(`${_ctx.componentName}--number`)
57
+ }, toDisplayString(_ctx.fillZero && item < 10 ? `0${item}` : item), 3)) : (openBlock(), createElementBlock("view", {
58
+ key: 1,
59
+ class: normalizeClass(`${_ctx.componentName}--dot`)
60
+ }, null, 2))
61
+ ], 64);
62
+ }), 128))
63
+ ], 2);
64
+ }
65
+ var index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
66
+ export { index as default };
@@ -17,21 +17,16 @@ var __spreadValues = (a, b) => {
17
17
  return a;
18
18
  };
19
19
  var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- var __require = typeof require !== "undefined" ? require : (x) => {
21
- throw new Error('Dynamic require of "' + x + '" is not supported');
22
- };
23
20
  /*!
24
- * @nutui/nutui v3.1.11 Wed Nov 24 2021 14:54:38 GMT+0800 (中国标准时间)
21
+ * @nutui/nutui v3.1.14 Wed Dec 22 2021 20:49:10 GMT+0800 (中国标准时间)
25
22
  * (c) 2021 @jdf2e.
26
23
  * Released under the MIT License.
27
24
  */
28
- import { reactive, computed, onMounted, toRefs, resolveComponent, openBlock, createBlock, normalizeClass, withCtx, createElementVNode, normalizeStyle, createVNode, toDisplayString, renderSlot, createElementBlock, createCommentVNode } from "vue";
25
+ import { reactive, computed, onMounted, onUnmounted, ref, onActivated, onDeactivated, toRefs, resolveComponent, openBlock, createElementBlock, normalizeClass, createElementVNode, normalizeStyle, createVNode, toDisplayString, renderSlot, createCommentVNode } from "vue";
29
26
  import { c as createComponent } from "./component.js";
30
- import { _ as _sfc_main$1 } from "./index.taro.vue_vue&type=script&lang.js";
31
- import Taro from "@tarojs/taro";
32
- import "./pxCheck.js";
27
+ import { _ as _export_sfc } from "./plugin-vue_export-helper.js";
33
28
  const { componentName, create } = createComponent("infiniteloading");
34
- var _sfc_main = create({
29
+ const _sfc_main = create({
35
30
  props: {
36
31
  hasMore: {
37
32
  type: Boolean,
@@ -79,16 +74,14 @@ var _sfc_main = create({
79
74
  }
80
75
  },
81
76
  emits: ["scroll-change", "load-more", "refresh"],
82
- components: {
83
- "nut-icon": _sfc_main$1
84
- },
85
77
  setup(props, { emit, slots }) {
86
78
  const state = reactive({
87
- scrollHeight: 0,
88
- scrollTop: 0,
89
- isInfiniting: false,
90
- direction: "down",
79
+ scrollEl: window,
80
+ scroller: null,
81
+ refreshTop: null,
82
+ beforeScrollTop: 0,
91
83
  isTouching: false,
84
+ isInfiniting: false,
92
85
  refreshMaxH: 0,
93
86
  y: 0,
94
87
  x: 0,
@@ -107,46 +100,69 @@ var _sfc_main = create({
107
100
  };
108
101
  });
109
102
  const getParentElement = (el) => {
110
- return Taro.createSelectorQuery().select(!!props.containerId ? `#${props.containerId} #${el}` : `#${el}`);
103
+ return !!props.containerId ? document.querySelector(`#${props.containerId}`) : el && el.parentNode;
111
104
  };
112
- const getScrollHeight = () => {
113
- const parentElement = getParentElement("scroller");
114
- parentElement.boundingClientRect((rect) => {
115
- state.scrollHeight = rect.height;
116
- }).exec();
105
+ const requestAniFrame = () => {
106
+ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || function(callback) {
107
+ window.setTimeout(callback, 1e3 / 60);
108
+ };
117
109
  };
118
- const lower = () => {
119
- if (state.direction == "up" || !props.hasMore || state.isInfiniting) {
120
- return false;
121
- } else {
122
- state.isInfiniting = true;
123
- emit("load-more", infiniteDone);
124
- }
110
+ const getWindowScrollTop = () => {
111
+ return window.pageYOffset !== void 0 ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
112
+ };
113
+ const calculateTopPosition = (el) => {
114
+ return !el ? 0 : el.offsetTop + calculateTopPosition(el.offsetParent);
125
115
  };
126
- const scroll = (e) => {
127
- if (e.detail.scrollTop <= 0) {
128
- e.detail.scrollTop = 0;
129
- } else if (e.detail.scrollTop >= state.scrollHeight) {
130
- e.detail.scrollTop = state.scrollHeight;
116
+ const isScrollAtBottom = () => {
117
+ let offsetDistance = 0;
118
+ let resScrollTop = 0;
119
+ let direction = "down";
120
+ const windowScrollTop = getWindowScrollTop();
121
+ if (props.useWindow) {
122
+ if (state.scroller) {
123
+ offsetDistance = calculateTopPosition(state.scroller) + state.scroller.offsetHeight - windowScrollTop - window.innerHeight;
124
+ }
125
+ resScrollTop = windowScrollTop;
126
+ } else {
127
+ const { scrollHeight, clientHeight, scrollTop } = state.scrollEl;
128
+ offsetDistance = scrollHeight - clientHeight - scrollTop;
129
+ resScrollTop = scrollTop;
131
130
  }
132
- if (e.detail.scrollTop > state.scrollTop || e.detail.scrollTop >= state.scrollHeight) {
133
- state.direction = "down";
131
+ if (state.beforeScrollTop > resScrollTop) {
132
+ direction = "up";
134
133
  } else {
135
- state.direction = "up";
134
+ direction = "down";
136
135
  }
137
- state.scrollTop = e.detail.scrollTop;
138
- emit("scroll-change", e.detail.scrollTop);
136
+ state.beforeScrollTop = resScrollTop;
137
+ emit("scroll-change", resScrollTop);
138
+ return offsetDistance <= props.threshold && direction == "down";
139
139
  };
140
140
  const infiniteDone = () => {
141
141
  state.isInfiniting = false;
142
142
  };
143
+ const handleScroll = () => {
144
+ requestAniFrame()(() => {
145
+ if (!isScrollAtBottom() || !props.hasMore || state.isInfiniting) {
146
+ return false;
147
+ } else {
148
+ state.isInfiniting = true;
149
+ emit("load-more", infiniteDone);
150
+ }
151
+ });
152
+ };
153
+ const scrollListener = () => {
154
+ state.scrollEl.addEventListener("scroll", handleScroll, props.useCapture);
155
+ };
156
+ const refreshDone = () => {
157
+ state.distance = 0;
158
+ state.isTouching = false;
159
+ };
143
160
  const touchStart = (event) => {
144
- if (state.scrollTop == 0 && !state.isTouching && props.isOpenRefresh) {
161
+ if (state.beforeScrollTop == 0 && !state.isTouching && props.isOpenRefresh) {
145
162
  state.y = event.touches[0].pageY;
146
163
  state.isTouching = true;
147
- getParentElement("refreshTop").boundingClientRect((rect) => {
148
- state.refreshMaxH = Math.floor(rect.height * 1 + 10);
149
- }).exec();
164
+ const childHeight = state.refreshTop.firstElementChild.offsetHeight;
165
+ state.refreshMaxH = Math.floor(childHeight * 1 + 10);
150
166
  }
151
167
  };
152
168
  const touchMove = (event) => {
@@ -167,20 +183,28 @@ var _sfc_main = create({
167
183
  emit("refresh", refreshDone);
168
184
  }
169
185
  };
170
- const refreshDone = () => {
171
- state.distance = 0;
172
- state.isTouching = false;
173
- };
174
186
  onMounted(() => {
175
- setTimeout(() => {
176
- getScrollHeight();
177
- }, 200);
187
+ const parentElement = getParentElement(state.scroller);
188
+ state.scrollEl = props.useWindow ? window : parentElement;
189
+ scrollListener();
190
+ });
191
+ onUnmounted(() => {
192
+ state.scrollEl.removeEventListener("scroll", handleScroll, props.useCapture);
193
+ });
194
+ const isKeepAlive = ref(false);
195
+ onActivated(() => {
196
+ if (isKeepAlive.value) {
197
+ isKeepAlive.value = false;
198
+ scrollListener();
199
+ }
200
+ });
201
+ onDeactivated(() => {
202
+ isKeepAlive.value = true;
203
+ state.scrollEl.removeEventListener("scroll", handleScroll, props.useCapture);
178
204
  });
179
205
  return __spreadProps(__spreadValues({
180
206
  classes
181
207
  }, toRefs(state)), {
182
- lower,
183
- scroll,
184
208
  touchStart,
185
209
  touchMove,
186
210
  touchEnd,
@@ -188,10 +212,7 @@ var _sfc_main = create({
188
212
  });
189
213
  }
190
214
  });
191
- const _hoisted_1 = {
192
- class: "top-box",
193
- id: "refreshTop"
194
- };
215
+ const _hoisted_1 = { class: "top-box" };
195
216
  const _hoisted_2 = { class: "top-text" };
196
217
  const _hoisted_3 = { class: "nut-infinite-container" };
197
218
  const _hoisted_4 = { class: "nut-infinite-bottom" };
@@ -206,46 +227,39 @@ const _hoisted_7 = {
206
227
  };
207
228
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
208
229
  const _component_nut_icon = resolveComponent("nut-icon");
209
- const _component_scroll_view = resolveComponent("scroll-view");
210
- return openBlock(), createBlock(_component_scroll_view, {
230
+ return openBlock(), createElementBlock("view", {
211
231
  class: normalizeClass(_ctx.classes),
212
- scrollY: "true",
213
- style: { "height": "100%" },
214
- id: "scroller",
215
- onScrolltolower: _ctx.lower,
216
- onScroll: _ctx.scroll,
217
- onTouchstart: _ctx.touchStart,
218
- onTouchmove: _ctx.touchMove,
219
- onTouchend: _ctx.touchEnd
220
- }, {
221
- default: withCtx(() => [
222
- createElementVNode("view", {
223
- class: "nut-infinite-top",
224
- style: normalizeStyle(_ctx.getStyle)
225
- }, [
226
- createElementVNode("view", _hoisted_1, [
227
- createVNode(_component_nut_icon, {
228
- class: "top-img",
229
- name: _ctx.pullIcon
230
- }, null, 8, ["name"]),
231
- createElementVNode("view", _hoisted_2, toDisplayString(_ctx.pullTxt), 1)
232
- ])
233
- ], 4),
234
- createElementVNode("view", _hoisted_3, [
235
- renderSlot(_ctx.$slots, "default")
236
- ]),
237
- createElementVNode("view", _hoisted_4, [
238
- _ctx.isInfiniting ? (openBlock(), createElementBlock("view", _hoisted_5, [
239
- createVNode(_component_nut_icon, {
240
- class: "bottom-img",
241
- name: _ctx.loadIcon
242
- }, null, 8, ["name"]),
243
- createElementVNode("view", _hoisted_6, toDisplayString(_ctx.loadTxt), 1)
244
- ])) : !_ctx.hasMore ? (openBlock(), createElementBlock("view", _hoisted_7, toDisplayString(_ctx.loadMoreTxt), 1)) : createCommentVNode("", true)
232
+ ref: "scroller",
233
+ onTouchstart: _cache[0] || (_cache[0] = (...args) => _ctx.touchStart && _ctx.touchStart(...args)),
234
+ onTouchmove: _cache[1] || (_cache[1] = (...args) => _ctx.touchMove && _ctx.touchMove(...args)),
235
+ onTouchend: _cache[2] || (_cache[2] = (...args) => _ctx.touchEnd && _ctx.touchEnd(...args))
236
+ }, [
237
+ createElementVNode("view", {
238
+ class: "nut-infinite-top",
239
+ ref: "refreshTop",
240
+ style: normalizeStyle(_ctx.getStyle)
241
+ }, [
242
+ createElementVNode("view", _hoisted_1, [
243
+ createVNode(_component_nut_icon, {
244
+ class: "top-img",
245
+ name: _ctx.pullIcon
246
+ }, null, 8, ["name"]),
247
+ createElementVNode("view", _hoisted_2, toDisplayString(_ctx.pullTxt), 1)
245
248
  ])
249
+ ], 4),
250
+ createElementVNode("view", _hoisted_3, [
251
+ renderSlot(_ctx.$slots, "default")
246
252
  ]),
247
- _: 3
248
- }, 8, ["class", "onScrolltolower", "onScroll", "onTouchstart", "onTouchmove", "onTouchend"]);
253
+ createElementVNode("view", _hoisted_4, [
254
+ _ctx.isInfiniting ? (openBlock(), createElementBlock("view", _hoisted_5, [
255
+ createVNode(_component_nut_icon, {
256
+ class: "bottom-img",
257
+ name: _ctx.loadIcon
258
+ }, null, 8, ["name"]),
259
+ createElementVNode("view", _hoisted_6, toDisplayString(_ctx.loadTxt), 1)
260
+ ])) : !_ctx.hasMore ? (openBlock(), createElementBlock("view", _hoisted_7, toDisplayString(_ctx.loadMoreTxt), 1)) : createCommentVNode("", true)
261
+ ])
262
+ ], 34);
249
263
  }
250
- _sfc_main.render = _sfc_render;
251
- export { _sfc_main as default };
264
+ var index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
265
+ export { index as default };