vxe-pc-ui 3.18.21 → 3.18.23

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 (77) hide show
  1. package/es/components.js +3 -0
  2. package/es/icon/style.css +1 -1
  3. package/es/scrollbar/index.js +12 -0
  4. package/es/scrollbar/src/scrollbar.js +576 -0
  5. package/es/scrollbar/src/util.js +54 -0
  6. package/es/scrollbar/style.css +102 -0
  7. package/es/scrollbar/style.min.css +1 -0
  8. package/es/style.css +1 -1
  9. package/es/style.min.css +1 -1
  10. package/es/ui/index.js +10 -1
  11. package/es/ui/src/log.js +1 -1
  12. package/es/upload/style.css +5 -3
  13. package/es/upload/style.min.css +1 -1
  14. package/es/vxe-scrollbar/index.js +3 -0
  15. package/es/vxe-scrollbar/style.css +102 -0
  16. package/es/vxe-scrollbar/style.min.css +1 -0
  17. package/es/vxe-upload/style.css +5 -3
  18. package/es/vxe-upload/style.min.css +1 -1
  19. package/lib/components.js +13 -1
  20. package/lib/components.min.js +1 -1
  21. package/lib/icon/style/style.css +1 -1
  22. package/lib/icon/style/style.min.css +1 -1
  23. package/lib/index.umd.js +727 -7
  24. package/lib/index.umd.min.js +1 -1
  25. package/lib/scrollbar/index.js +19 -0
  26. package/lib/scrollbar/index.min.js +1 -0
  27. package/lib/scrollbar/src/scrollbar.js +584 -0
  28. package/lib/scrollbar/src/scrollbar.min.js +1 -0
  29. package/lib/scrollbar/src/util.js +63 -0
  30. package/lib/scrollbar/src/util.min.js +1 -0
  31. package/lib/scrollbar/style/index.js +1 -0
  32. package/lib/scrollbar/style/style.css +102 -0
  33. package/lib/scrollbar/style/style.min.css +1 -0
  34. package/lib/style.css +1 -1
  35. package/lib/style.min.css +1 -1
  36. package/lib/ui/index.js +10 -1
  37. package/lib/ui/index.min.js +1 -1
  38. package/lib/ui/src/log.js +1 -1
  39. package/lib/ui/src/log.min.js +1 -1
  40. package/lib/upload/style/style.css +5 -3
  41. package/lib/upload/style/style.min.css +1 -1
  42. package/lib/vxe-scrollbar/index.js +22 -0
  43. package/lib/vxe-scrollbar/index.min.js +1 -0
  44. package/lib/vxe-scrollbar/style/index.js +1 -0
  45. package/lib/vxe-scrollbar/style/style.css +102 -0
  46. package/lib/vxe-scrollbar/style/style.min.css +1 -0
  47. package/lib/vxe-upload/style/style.css +5 -3
  48. package/lib/vxe-upload/style/style.min.css +1 -1
  49. package/package.json +2 -2
  50. package/packages/components.ts +3 -0
  51. package/packages/scrollbar/index.ts +16 -0
  52. package/packages/scrollbar/src/scrollbar.ts +626 -0
  53. package/packages/scrollbar/src/util.ts +57 -0
  54. package/packages/ui/index.ts +9 -0
  55. package/styles/all.scss +1 -0
  56. package/styles/components/scrollbar.scss +114 -0
  57. package/styles/components/upload.scss +5 -3
  58. package/styles/theme/base.scss +5 -0
  59. package/styles/theme/dark.scss +5 -0
  60. package/styles/theme/light.scss +5 -0
  61. package/styles/variable.scss +5 -0
  62. package/types/all.d.ts +3 -0
  63. package/types/components/gantt.d.ts +3 -3
  64. package/types/components/scrollbar.d.ts +209 -0
  65. package/types/ui/global-config.d.ts +2 -0
  66. /package/es/icon/{iconfont.1790757609697.ttf → iconfont.1791517840480.ttf} +0 -0
  67. /package/es/icon/{iconfont.1790757609697.woff → iconfont.1791517840480.woff} +0 -0
  68. /package/es/icon/{iconfont.1790757609697.woff2 → iconfont.1791517840480.woff2} +0 -0
  69. /package/es/{iconfont.1790757609697.ttf → iconfont.1791517840480.ttf} +0 -0
  70. /package/es/{iconfont.1790757609697.woff → iconfont.1791517840480.woff} +0 -0
  71. /package/es/{iconfont.1790757609697.woff2 → iconfont.1791517840480.woff2} +0 -0
  72. /package/lib/icon/style/{iconfont.1790757609697.ttf → iconfont.1791517840480.ttf} +0 -0
  73. /package/lib/icon/style/{iconfont.1790757609697.woff → iconfont.1791517840480.woff} +0 -0
  74. /package/lib/icon/style/{iconfont.1790757609697.woff2 → iconfont.1791517840480.woff2} +0 -0
  75. /package/lib/{iconfont.1790757609697.ttf → iconfont.1791517840480.ttf} +0 -0
  76. /package/lib/{iconfont.1790757609697.woff → iconfont.1791517840480.woff} +0 -0
  77. /package/lib/{iconfont.1790757609697.woff2 → iconfont.1791517840480.woff2} +0 -0
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.VxeScrollbar = exports.Scrollbar = void 0;
7
+ var _core = require("@vxe-ui/core");
8
+ var _scrollbar = _interopRequireDefault(require("./src/scrollbar"));
9
+ var _dynamics = require("../dynamics");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ var VxeScrollbar = exports.VxeScrollbar = Object.assign({}, _scrollbar.default, {
12
+ install: function install(app) {
13
+ app.component(_scrollbar.default.name, _scrollbar.default);
14
+ }
15
+ });
16
+ _dynamics.dynamicApp.use(VxeScrollbar);
17
+ _core.VxeUI.component(_scrollbar.default);
18
+ var Scrollbar = exports.Scrollbar = VxeScrollbar;
19
+ var _default = exports.default = VxeScrollbar;
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=exports.VxeScrollbar=exports.Scrollbar=void 0;var _core=require("@vxe-ui/core"),_scrollbar=_interopRequireDefault(require("./src/scrollbar")),_dynamics=require("../dynamics");function _interopRequireDefault(r){return r&&r.__esModule?r:{default:r}}var VxeScrollbar=exports.VxeScrollbar=Object.assign({},_scrollbar.default,{install:function(r){r.component(_scrollbar.default.name,_scrollbar.default)}}),Scrollbar=(_dynamics.dynamicApp.use(VxeScrollbar),_core.VxeUI.component(_scrollbar.default),exports.Scrollbar=VxeScrollbar),_default=exports.default=VxeScrollbar;
@@ -0,0 +1,584 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _comp = require("../../ui/src/comp");
8
+ var _xeUtils = _interopRequireDefault(require("xe-utils"));
9
+ var _ui = require("../../ui");
10
+ var _dom = require("../../ui/src/dom");
11
+ var _util = require("./util");
12
+ var _loading = _interopRequireDefault(require("../../loading"));
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
+ var getConfig = _ui.VxeUI.getConfig,
15
+ createEvent = _ui.VxeUI.createEvent,
16
+ domUtils = _ui.VxeUI.domUtils,
17
+ globalResize = _ui.VxeUI.globalResize,
18
+ renderEmptyElement = _ui.VxeUI.renderEmptyElement;
19
+ function createReactData() {
20
+ return {
21
+ yThumbHeight: 0,
22
+ xThumbWidth: 0
23
+ };
24
+ }
25
+ function createInternalData() {
26
+ return {
27
+ // resizeObserver: undefined,
28
+ // isThumbDrag: false,
29
+ thumbDragOffset: 0,
30
+ yThumbTop: 0,
31
+ xThumbLeft: 0,
32
+ lastScrollTop: 0,
33
+ lastScrollLeft: 0
34
+ };
35
+ }
36
+ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defineVxeComponent)({
37
+ name: 'VxeScrollbar',
38
+ props: {
39
+ width: [String, Number],
40
+ height: [String, Number],
41
+ minWidth: [String, Number],
42
+ minHeight: [String, Number],
43
+ maxWidth: [String, Number],
44
+ maxHeight: [String, Number],
45
+ loading: Boolean,
46
+ native: {
47
+ type: Boolean,
48
+ default: function _default() {
49
+ return getConfig().scrollbar.native;
50
+ }
51
+ },
52
+ xConfig: Object,
53
+ yConfig: Object,
54
+ className: String,
55
+ viewClassName: String,
56
+ autoResize: {
57
+ type: Boolean,
58
+ default: function _default() {
59
+ return getConfig().scrollbar.autoResize;
60
+ }
61
+ },
62
+ syncResize: [Boolean, String, Number]
63
+ },
64
+ data: function data() {
65
+ var xID = _xeUtils.default.uniqueId();
66
+ var reactData = createReactData();
67
+ return Object.assign(Object.assign({}, {}), {
68
+ xID: xID,
69
+ reactData: reactData,
70
+ reFlag: 0
71
+ });
72
+ },
73
+ computed: {
74
+ computeWrapperStyle: function computeWrapperStyle() {
75
+ var $xeScrollbar = this;
76
+ var props = $xeScrollbar;
77
+ var width = props.width,
78
+ height = props.height,
79
+ minWidth = props.minWidth,
80
+ minHeight = props.minHeight,
81
+ maxWidth = props.maxWidth,
82
+ maxHeight = props.maxHeight;
83
+ var xOpts = $xeScrollbar.computeXOpts;
84
+ var yOpts = $xeScrollbar.computeYOpts;
85
+ var stys = {};
86
+ if (width) {
87
+ stys.width = (0, _dom.toCssUnit)(width);
88
+ }
89
+ if (height) {
90
+ stys.height = (0, _dom.toCssUnit)(height);
91
+ }
92
+ if (minWidth) {
93
+ stys.minWidth = (0, _dom.toCssUnit)(minWidth);
94
+ }
95
+ if (minHeight) {
96
+ stys.minHeight = (0, _dom.toCssUnit)(minHeight);
97
+ }
98
+ if (maxWidth) {
99
+ stys.maxWidth = (0, _dom.toCssUnit)(maxWidth);
100
+ }
101
+ if (maxHeight) {
102
+ stys.maxHeight = (0, _dom.toCssUnit)(maxHeight);
103
+ }
104
+ if (yOpts.width) {
105
+ stys['--vxe-ui-scrollbar-y-width'] = (0, _dom.toCssUnit)(yOpts.width);
106
+ }
107
+ if (xOpts.height) {
108
+ stys['--vxe-ui-scrollbar-x-height'] = (0, _dom.toCssUnit)(xOpts.height);
109
+ }
110
+ return stys;
111
+ },
112
+ computeWrapperClss: function computeWrapperClss() {
113
+ var $xeScrollbar = this;
114
+ var props = $xeScrollbar;
115
+ var native = props.native,
116
+ className = props.className;
117
+ var xOpts = $xeScrollbar.computeXOpts;
118
+ var yOpts = $xeScrollbar.computeYOpts;
119
+ return domUtils.buildClass(['vxe-scrollbar', "ov-x--".concat(xOpts.visible || 'visible'), "ov-y--".concat(yOpts.visible || 'visible'), native ? 'is--native' : 'is--virtual', className], {
120
+ 'ov-x--auto-hide': xOpts.autoHide,
121
+ 'ov-y--auto-hide': yOpts.autoHide
122
+ });
123
+ },
124
+ computeViewClss: function computeViewClss() {
125
+ var $xeScrollbar = this;
126
+ var props = $xeScrollbar;
127
+ var viewClassName = props.viewClassName;
128
+ return domUtils.buildClass(['vxe-scrollbar--view', viewClassName]);
129
+ },
130
+ computeXOpts: function computeXOpts() {
131
+ var $xeScrollbar = this;
132
+ var props = $xeScrollbar;
133
+ return Object.assign({}, getConfig().scrollbar.xConfig, props.xConfig);
134
+ },
135
+ computeYOpts: function computeYOpts() {
136
+ var $xeScrollbar = this;
137
+ var props = $xeScrollbar;
138
+ return Object.assign({}, getConfig().scrollbar.yConfig, props.yConfig);
139
+ }
140
+ },
141
+ methods: {
142
+ //
143
+ // Method
144
+ //
145
+ dispatchEvent: function dispatchEvent(type, params, evnt) {
146
+ var $xeScrollbar = this;
147
+ $xeScrollbar.$emit(type, createEvent(evnt, {
148
+ $scrollbar: $xeScrollbar
149
+ }, params));
150
+ },
151
+ scrollTo: function scrollTo(left, top) {
152
+ var $xeScrollbar = this;
153
+ var viewEl = $xeScrollbar.$refs.refViewElem;
154
+ if (viewEl) {
155
+ if (_xeUtils.default.isNumber(left)) {
156
+ viewEl.scrollTo(left, top || 0);
157
+ } else {
158
+ viewEl.scrollTo(left);
159
+ }
160
+ }
161
+ },
162
+ scrollIntoView: function scrollIntoView() {
163
+ var $xeScrollbar = this;
164
+ var viewEl = $xeScrollbar.$refs.refViewElem;
165
+ if (viewEl) {
166
+ viewEl.scrollIntoView();
167
+ }
168
+ },
169
+ recalculate: function recalculate() {
170
+ var $xeScrollbar = this;
171
+ $xeScrollbar.updateThumbSize();
172
+ $xeScrollbar.updateThumbOffset();
173
+ return $xeScrollbar.$nextTick();
174
+ },
175
+ updateThumbSize: function updateThumbSize() {
176
+ var $xeScrollbar = this;
177
+ var reactData = $xeScrollbar.reactData;
178
+ var viewEl = $xeScrollbar.$refs.refViewElem;
179
+ if (!viewEl) {
180
+ return;
181
+ }
182
+ var trackXEl = $xeScrollbar.$refs.refTrackXElem;
183
+ var xThumbWidth = trackXEl ? (0, _util.getThumbSize)(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
184
+ var thumbXElem = $xeScrollbar.$refs.refThumbXElem;
185
+ if (thumbXElem) {
186
+ thumbXElem.style.width = xThumbWidth + 'px';
187
+ }
188
+ reactData.xThumbWidth = xThumbWidth;
189
+ var trackYEl = $xeScrollbar.$refs.refTrackYElem;
190
+ var yThumbHeight = trackYEl ? (0, _util.getThumbSize)(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
191
+ var thumbYElem = $xeScrollbar.$refs.refThumbYElem;
192
+ if (thumbYElem) {
193
+ thumbYElem.style.height = yThumbHeight + 'px';
194
+ }
195
+ reactData.yThumbHeight = yThumbHeight;
196
+ },
197
+ updateThumbOffset: function updateThumbOffset() {
198
+ var $xeScrollbar = this;
199
+ var reactData = $xeScrollbar.reactData;
200
+ var internalData = $xeScrollbar.internalData;
201
+ var viewEl = $xeScrollbar.$refs.refViewElem;
202
+ if (!viewEl) {
203
+ return;
204
+ }
205
+ var xThumbWidth = reactData.xThumbWidth,
206
+ yThumbHeight = reactData.yThumbHeight;
207
+ var trackXEl = $xeScrollbar.$refs.refTrackXElem;
208
+ var thumbXElem = $xeScrollbar.$refs.refThumbXElem;
209
+ var xThumbLeft = trackXEl && xThumbWidth ? (0, _util.getThumbOffsetSize)(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
210
+ internalData.xThumbLeft = xThumbLeft;
211
+ if (thumbXElem && xThumbWidth) {
212
+ thumbXElem.style.width = xThumbWidth + 'px';
213
+ thumbXElem.style.transform = "translateX(".concat(xThumbLeft, "px)");
214
+ }
215
+ var trackYEl = $xeScrollbar.$refs.refTrackYElem;
216
+ var thumbYElem = $xeScrollbar.$refs.refThumbYElem;
217
+ var yThumbTop = trackYEl && yThumbHeight ? (0, _util.getThumbOffsetSize)(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
218
+ internalData.yThumbTop = yThumbTop;
219
+ if (thumbYElem && yThumbHeight) {
220
+ thumbYElem.style.height = yThumbHeight + 'px';
221
+ thumbYElem.style.transform = "translateY(".concat(yThumbTop, "px)");
222
+ }
223
+ },
224
+ scrollEvent: function scrollEvent(evnt) {
225
+ var $xeScrollbar = this;
226
+ var reactData = $xeScrollbar.reactData;
227
+ var internalData = $xeScrollbar.internalData;
228
+ var xThumbWidth = reactData.xThumbWidth,
229
+ yThumbHeight = reactData.yThumbHeight;
230
+ var lastScrollTop = internalData.lastScrollTop,
231
+ lastScrollLeft = internalData.lastScrollLeft;
232
+ var xOpts = $xeScrollbar.computeXOpts;
233
+ var yOpts = $xeScrollbar.computeYOpts;
234
+ var viewEl = evnt.currentTarget;
235
+ var scrollTop = viewEl.scrollTop,
236
+ scrollLeft = viewEl.scrollLeft,
237
+ clientWidth = viewEl.clientWidth,
238
+ clientHeight = viewEl.clientHeight,
239
+ scrollHeight = viewEl.scrollHeight,
240
+ scrollWidth = viewEl.scrollWidth;
241
+ var direction = '';
242
+ var isTopBoundary = false;
243
+ var isBottomBoundary = false;
244
+ var isLeftBoundary = false;
245
+ var isRightBoundary = false;
246
+ if (lastScrollTop !== scrollTop) {
247
+ var yThreshold = _xeUtils.default.toNumber(yOpts.threshold) || 1;
248
+ if (lastScrollTop < scrollTop) {
249
+ direction = 'bottom';
250
+ if (yThumbHeight > 0 && scrollTop + clientHeight >= scrollHeight - yThreshold) {
251
+ isBottomBoundary = true;
252
+ }
253
+ } else {
254
+ direction = 'top';
255
+ if (yThumbHeight > 0 && scrollTop <= yThreshold) {
256
+ isTopBoundary = true;
257
+ }
258
+ }
259
+ }
260
+ if (lastScrollLeft !== scrollLeft) {
261
+ var xThreshold = _xeUtils.default.toNumber(xOpts.threshold) || 1;
262
+ if (lastScrollLeft < scrollLeft) {
263
+ direction = 'right';
264
+ if (xThumbWidth > 0 && scrollLeft + clientWidth >= scrollWidth - xThreshold) {
265
+ isRightBoundary = true;
266
+ }
267
+ } else {
268
+ direction = 'left';
269
+ if (xThumbWidth > 0 && scrollLeft <= xThreshold) {
270
+ isLeftBoundary = true;
271
+ }
272
+ }
273
+ }
274
+ $xeScrollbar.updateThumbOffset();
275
+ internalData.lastScrollTop = scrollTop;
276
+ internalData.lastScrollLeft = scrollLeft;
277
+ if (isBottomBoundary || isTopBoundary || isRightBoundary || isLeftBoundary) {
278
+ $xeScrollbar.dispatchEvent('scroll-boundary', {
279
+ direction: direction,
280
+ isTop: isTopBoundary,
281
+ isBottom: isBottomBoundary,
282
+ isLeft: isLeftBoundary,
283
+ isRight: isRightBoundary,
284
+ scrollTop: scrollTop,
285
+ scrollLeft: scrollLeft,
286
+ clientWidth: clientWidth,
287
+ clientHeight: clientHeight,
288
+ scrollHeight: scrollHeight,
289
+ scrollWidth: scrollWidth
290
+ }, evnt);
291
+ }
292
+ $xeScrollbar.dispatchEvent('scroll', {
293
+ direction: direction,
294
+ isTop: yThumbHeight > 0 && scrollTop <= 0,
295
+ isBottom: yThumbHeight > 0 && scrollTop + clientHeight >= scrollHeight,
296
+ isLeft: xThumbWidth > 0 && scrollLeft <= 0,
297
+ isRight: xThumbWidth > 0 && scrollLeft + clientWidth >= scrollWidth,
298
+ scrollTop: scrollTop,
299
+ scrollLeft: scrollLeft,
300
+ clientWidth: clientWidth,
301
+ clientHeight: clientHeight,
302
+ scrollHeight: scrollHeight,
303
+ scrollWidth: scrollWidth
304
+ }, evnt);
305
+ },
306
+ clickTrackXEvent: function clickTrackXEvent(evnt) {
307
+ var $xeScrollbar = this;
308
+ var reactData = $xeScrollbar.reactData;
309
+ var trackEl = evnt.currentTarget;
310
+ if (trackEl !== evnt.target) {
311
+ return;
312
+ }
313
+ var viewEl = $xeScrollbar.$refs.refViewElem;
314
+ if (!viewEl) {
315
+ return;
316
+ }
317
+ var xThumbWidth = reactData.xThumbWidth;
318
+ var trackRect = trackEl.getBoundingClientRect();
319
+ viewEl.scrollTo({
320
+ left: (0, _util.getScrollFromClick)(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
321
+ behavior: 'auto'
322
+ });
323
+ },
324
+ clickTrackYEvent: function clickTrackYEvent(evnt) {
325
+ var $xeScrollbar = this;
326
+ var reactData = $xeScrollbar.reactData;
327
+ var trackEl = evnt.currentTarget;
328
+ if (trackEl !== evnt.target) {
329
+ return;
330
+ }
331
+ var viewEl = $xeScrollbar.$refs.refViewElem;
332
+ if (!viewEl) {
333
+ return;
334
+ }
335
+ var yThumbHeight = reactData.yThumbHeight;
336
+ var trackRect = trackEl.getBoundingClientRect();
337
+ viewEl.scrollTo({
338
+ top: (0, _util.getScrollFromClick)(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
339
+ behavior: 'auto'
340
+ });
341
+ },
342
+ pointerdownThumbXEvent: function pointerdownThumbXEvent(evnt) {
343
+ var $xeScrollbar = this;
344
+ var reactData = $xeScrollbar.reactData;
345
+ var internalData = $xeScrollbar.internalData;
346
+ var thumbEl = evnt.currentTarget;
347
+ internalData.isThumbDrag = true;
348
+ thumbEl.setPointerCapture(evnt.pointerId);
349
+ var viewEl = $xeScrollbar.$refs.refViewElem;
350
+ if (!viewEl) {
351
+ return;
352
+ }
353
+ var xThumbWidth = reactData.xThumbWidth;
354
+ var trackEl = thumbEl.parentElement;
355
+ var trackRect = trackEl.getBoundingClientRect();
356
+ var pointerPosition = evnt.clientX - trackRect.left;
357
+ // 记录 thumb 的偏移
358
+ var thumbOffset = (0, _util.getThumbOffsetSize)(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
359
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
360
+ },
361
+ pointermoveThumbXEvent: function pointermoveThumbXEvent(evnt) {
362
+ var $xeScrollbar = this;
363
+ var reactData = $xeScrollbar.reactData;
364
+ var internalData = $xeScrollbar.internalData;
365
+ var isThumbDrag = internalData.isThumbDrag,
366
+ thumbDragOffset = internalData.thumbDragOffset;
367
+ if (isThumbDrag) {
368
+ var viewEl = $xeScrollbar.$refs.refViewElem;
369
+ if (!viewEl) {
370
+ return;
371
+ }
372
+ var xThumbWidth = reactData.xThumbWidth;
373
+ var thumbEl = evnt.currentTarget;
374
+ var trackEl = thumbEl.parentElement;
375
+ var trackRect = trackEl.getBoundingClientRect();
376
+ // 更新偏移
377
+ viewEl.scrollLeft = (0, _util.getScrollFromDrag)(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
378
+ }
379
+ },
380
+ cleatPointerThumbEvent: function cleatPointerThumbEvent(evnt) {
381
+ var $xeScrollbar = this;
382
+ var internalData = $xeScrollbar.internalData;
383
+ var thumbEl = evnt.currentTarget;
384
+ thumbEl.releasePointerCapture(evnt.pointerId);
385
+ internalData.isThumbDrag = false;
386
+ },
387
+ pointerdownThumbYEvent: function pointerdownThumbYEvent(evnt) {
388
+ var $xeScrollbar = this;
389
+ var reactData = $xeScrollbar.reactData;
390
+ var internalData = $xeScrollbar.internalData;
391
+ var thumbEl = evnt.currentTarget;
392
+ internalData.isThumbDrag = true;
393
+ thumbEl.setPointerCapture(evnt.pointerId);
394
+ var viewEl = $xeScrollbar.$refs.refViewElem;
395
+ if (!viewEl) {
396
+ return;
397
+ }
398
+ var yThumbHeight = reactData.yThumbHeight;
399
+ var trackEl = thumbEl.parentElement;
400
+ var trackRect = trackEl.getBoundingClientRect();
401
+ var pointerPosition = evnt.clientY - trackRect.top;
402
+ // 记录 thumb 的偏移
403
+ var thumbOffset = (0, _util.getThumbOffsetSize)(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
404
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
405
+ },
406
+ pointermoveThumbYEvent: function pointermoveThumbYEvent(evnt) {
407
+ var $xeScrollbar = this;
408
+ var reactData = $xeScrollbar.reactData;
409
+ var internalData = $xeScrollbar.internalData;
410
+ var isThumbDrag = internalData.isThumbDrag,
411
+ thumbDragOffset = internalData.thumbDragOffset;
412
+ if (isThumbDrag) {
413
+ var viewEl = $xeScrollbar.$refs.refViewElem;
414
+ if (!viewEl) {
415
+ return;
416
+ }
417
+ var yThumbHeight = reactData.yThumbHeight;
418
+ var thumbEl = evnt.currentTarget;
419
+ var trackEl = thumbEl.parentElement;
420
+ var trackRect = trackEl.getBoundingClientRect();
421
+ // 更新偏移
422
+ viewEl.scrollTop = (0, _util.getScrollFromDrag)(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
423
+ }
424
+ },
425
+ //
426
+ // Render
427
+ //
428
+ renderVN: function renderVN(h) {
429
+ var $xeScrollbar = this;
430
+ var props = $xeScrollbar;
431
+ var slots = $xeScrollbar.$scopedSlots;
432
+ var native = props.native,
433
+ loading = props.loading,
434
+ autoResize = props.autoResize;
435
+ var wrapperStyle = $xeScrollbar.computeWrapperStyle;
436
+ var wrapperClss = $xeScrollbar.computeWrapperClss;
437
+ var viewClss = $xeScrollbar.computeViewClss;
438
+ var xOpts = $xeScrollbar.computeXOpts;
439
+ var yOpts = $xeScrollbar.computeYOpts;
440
+ var defaultSlot = slots.default;
441
+ return h('div', {
442
+ ref: 'refElem',
443
+ class: wrapperClss,
444
+ style: wrapperStyle
445
+ }, [h('div', {
446
+ ref: 'refViewElem',
447
+ class: viewClss,
448
+ on: {
449
+ scroll: $xeScrollbar.scrollEvent
450
+ }
451
+ }, [h('div', {
452
+ ref: 'refViewInnerElem',
453
+ class: 'vxe-scrollbar--view-inner'
454
+ }, autoResize ? [h('div', {
455
+ key: 'vi',
456
+ ref: 'refViewInnerElem',
457
+ class: 'vxe-scrollbar--view-inner'
458
+ }, defaultSlot ? defaultSlot({}) : [])] : defaultSlot ? defaultSlot({}) : [])]), native || xOpts.visible === 'hidden' ? renderEmptyElement($xeScrollbar) : h('div', {
459
+ ref: 'refTrackXElem',
460
+ class: 'vxe-scrollbar--track-x',
461
+ on: {
462
+ click: $xeScrollbar.clickTrackXEvent
463
+ }
464
+ }, [h('div', {
465
+ ref: 'refThumbXElem',
466
+ class: 'vxe-scrollbar--thumb-x',
467
+ on: {
468
+ pointerdown: $xeScrollbar.pointerdownThumbXEvent,
469
+ pointermove: $xeScrollbar.pointermoveThumbXEvent,
470
+ pointerup: $xeScrollbar.cleatPointerThumbEvent,
471
+ pointercancel: $xeScrollbar.cleatPointerThumbEvent,
472
+ lostpointercapture: $xeScrollbar.cleatPointerThumbEvent
473
+ }
474
+ })]), native || yOpts.visible === 'hidden' ? renderEmptyElement($xeScrollbar) : h('div', {
475
+ ref: 'refTrackYElem',
476
+ class: 'vxe-scrollbar--track-y',
477
+ on: {
478
+ click: $xeScrollbar.clickTrackYEvent
479
+ }
480
+ }, [h('div', {
481
+ ref: 'refThumbYElem',
482
+ class: 'vxe-scrollbar--thumb-y',
483
+ on: {
484
+ pointerdown: $xeScrollbar.pointerdownThumbYEvent,
485
+ pointermove: $xeScrollbar.pointermoveThumbYEvent,
486
+ pointerup: $xeScrollbar.cleatPointerThumbEvent,
487
+ pointercancel: $xeScrollbar.cleatPointerThumbEvent,
488
+ lostpointercapture: $xeScrollbar.cleatPointerThumbEvent
489
+ }
490
+ })]), h(_loading.default, {
491
+ class: 'vxe-scrollbar--loading',
492
+ props: {
493
+ value: loading
494
+ }
495
+ })]);
496
+ }
497
+ },
498
+ watch: {
499
+ height: function height() {
500
+ var $xeScrollbar = this;
501
+ $xeScrollbar.reFlag++;
502
+ },
503
+ width: function width() {
504
+ var $xeScrollbar = this;
505
+ $xeScrollbar.reFlag++;
506
+ },
507
+ minHeight: function minHeight() {
508
+ var $xeScrollbar = this;
509
+ $xeScrollbar.reFlag++;
510
+ },
511
+ minWidth: function minWidth() {
512
+ var $xeScrollbar = this;
513
+ $xeScrollbar.reFlag++;
514
+ },
515
+ maxHeight: function maxHeight() {
516
+ var $xeScrollbar = this;
517
+ $xeScrollbar.reFlag++;
518
+ },
519
+ maxWidth: function maxWidth() {
520
+ var $xeScrollbar = this;
521
+ $xeScrollbar.reFlag++;
522
+ },
523
+ native: function native() {
524
+ var $xeScrollbar = this;
525
+ $xeScrollbar.reFlag++;
526
+ },
527
+ syncResize: function syncResize() {
528
+ var $xeScrollbar = this;
529
+ $xeScrollbar.reFlag++;
530
+ },
531
+ reFlag: function reFlag() {
532
+ var $xeScrollbar = this;
533
+ $xeScrollbar.recalculate().then(function () {
534
+ $xeScrollbar.recalculate();
535
+ });
536
+ }
537
+ },
538
+ created: function created() {
539
+ var $xeScrollbar = this;
540
+ $xeScrollbar.internalData = createInternalData();
541
+ },
542
+ mounted: function mounted() {
543
+ var $xeScrollbar = this;
544
+ var props = $xeScrollbar;
545
+ var internalData = $xeScrollbar.internalData;
546
+ var autoResize = props.autoResize;
547
+ var viewEl = $xeScrollbar.$refs.refViewElem;
548
+ var viewInnerEl = $xeScrollbar.$refs.refViewInnerElem;
549
+ if (autoResize) {
550
+ var resizeObserver = globalResize.create(function () {
551
+ if (props.autoResize) {
552
+ $xeScrollbar.reFlag++;
553
+ }
554
+ });
555
+ if (viewEl) {
556
+ resizeObserver.observe(viewEl);
557
+ }
558
+ if (viewInnerEl) {
559
+ resizeObserver.observe(viewInnerEl);
560
+ }
561
+ internalData.resizeObserver = resizeObserver;
562
+ }
563
+ $xeScrollbar.reFlag++;
564
+ },
565
+ beforeDestroy: function beforeDestroy() {
566
+ var $xeScrollbar = this;
567
+ var internalData = $xeScrollbar.internalData;
568
+ var resizeObserver = internalData.resizeObserver;
569
+ if (resizeObserver) {
570
+ resizeObserver.disconnect();
571
+ }
572
+ },
573
+ destroyed: function destroyed() {
574
+ var $xeScrollbar = this;
575
+ var reactData = $xeScrollbar.reactData;
576
+ var internalData = $xeScrollbar.internalData;
577
+ _xeUtils.default.assign(reactData, createReactData());
578
+ _xeUtils.default.assign(internalData, createInternalData());
579
+ },
580
+ render: function render(h) {
581
+ return this.renderVN(h);
582
+ }
583
+ });
584
+ /* define-vxe-component end */
@@ -0,0 +1 @@
1
+ Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var _comp=require("../../ui/src/comp"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../ui"),_dom=require("../../ui/src/dom"),_util=require("./util"),_loading=_interopRequireDefault(require("../../loading"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var getConfig=_ui.VxeUI.getConfig,createEvent=_ui.VxeUI.createEvent,domUtils=_ui.VxeUI.domUtils,globalResize=_ui.VxeUI.globalResize,renderEmptyElement=_ui.VxeUI.renderEmptyElement;function createReactData(){return{yThumbHeight:0,xThumbWidth:0}}function createInternalData(){return{thumbDragOffset:0,yThumbTop:0,xThumbLeft:0,lastScrollTop:0,lastScrollLeft:0}}var _default2=exports.default=(0,_comp.defineVxeComponent)({name:"VxeScrollbar",props:{width:[String,Number],height:[String,Number],minWidth:[String,Number],minHeight:[String,Number],maxWidth:[String,Number],maxHeight:[String,Number],loading:Boolean,native:{type:Boolean,default:function(){return getConfig().scrollbar.native}},xConfig:Object,yConfig:Object,className:String,viewClassName:String,autoResize:{type:Boolean,default:function(){return getConfig().scrollbar.autoResize}},syncResize:[Boolean,String,Number]},data:function(){var e=_xeUtils.default.uniqueId(),t=createReactData();return Object.assign(Object.assign({},{}),{xID:e,reactData:t,reFlag:0})},computed:{computeWrapperStyle:function(){var e=this,t=e.width,i=e.height,r=e.minWidth,l=e.minHeight,n=e.maxWidth,a=e.maxHeight,o=e.computeXOpts,e=e.computeYOpts,s={};return t&&(s.width=(0,_dom.toCssUnit)(t)),i&&(s.height=(0,_dom.toCssUnit)(i)),r&&(s.minWidth=(0,_dom.toCssUnit)(r)),l&&(s.minHeight=(0,_dom.toCssUnit)(l)),n&&(s.maxWidth=(0,_dom.toCssUnit)(n)),a&&(s.maxHeight=(0,_dom.toCssUnit)(a)),e.width&&(s["--vxe-ui-scrollbar-y-width"]=(0,_dom.toCssUnit)(e.width)),o.height&&(s["--vxe-ui-scrollbar-x-height"]=(0,_dom.toCssUnit)(o.height)),s},computeWrapperClss:function(){var e=this,t=e.native,i=e.className,r=e.computeXOpts,e=e.computeYOpts;return domUtils.buildClass(["vxe-scrollbar","ov-x--".concat(r.visible||"visible"),"ov-y--".concat(e.visible||"visible"),t?"is--native":"is--virtual",i],{"ov-x--auto-hide":r.autoHide,"ov-y--auto-hide":e.autoHide})},computeViewClss:function(){var e=this.viewClassName;return domUtils.buildClass(["vxe-scrollbar--view",e])},computeXOpts:function(){return Object.assign({},getConfig().scrollbar.xConfig,this.xConfig)},computeYOpts:function(){return Object.assign({},getConfig().scrollbar.yConfig,this.yConfig)}},methods:{dispatchEvent:function(e,t,i){this.$emit(e,createEvent(i,{$scrollbar:this},t))},scrollTo:function(e,t){var i=this.$refs.refViewElem;i&&(_xeUtils.default.isNumber(e)?i.scrollTo(e,t||0):i.scrollTo(e))},scrollIntoView:function(){var e=this.$refs.refViewElem;e&&e.scrollIntoView()},recalculate:function(){var e=this;return e.updateThumbSize(),e.updateThumbOffset(),e.$nextTick()},updateThumbSize:function(){var e,t,i=this,r=i.reactData,l=i.$refs.refViewElem;l&&(t=(t=i.$refs.refTrackXElem)?(0,_util.getThumbSize)(l.clientWidth,l.scrollWidth,t.clientWidth):0,(e=i.$refs.refThumbXElem)&&(e.style.width=t+"px"),r.xThumbWidth=t,t=(e=i.$refs.refTrackYElem)?(0,_util.getThumbSize)(l.clientHeight,l.scrollHeight,e.clientHeight):0,(l=i.$refs.refThumbYElem)&&(l.style.height=t+"px"),r.yThumbHeight=t)},updateThumbOffset:function(){var e,t,i,r=this,l=r.reactData,n=r.internalData,a=r.$refs.refViewElem;a&&(e=l.xThumbWidth,l=l.yThumbHeight,i=r.$refs.refTrackXElem,t=r.$refs.refThumbXElem,i=i&&e?(0,_util.getThumbOffsetSize)(a.scrollLeft,a.clientWidth,a.scrollWidth,i.clientWidth,e):0,n.xThumbLeft=i,t&&e&&(t.style.width=e+"px",t.style.transform="translateX(".concat(i,"px)")),e=r.$refs.refTrackYElem,t=r.$refs.refThumbYElem,i=e&&l?(0,_util.getThumbOffsetSize)(a.scrollTop,a.clientHeight,a.scrollHeight,e.clientHeight,l):0,n.yThumbTop=i,t)&&l&&(t.style.height=l+"px",t.style.transform="translateY(".concat(i,"px)"))},scrollEvent:function(e){var t,i=this,r=i.reactData,l=i.internalData,n=r.xThumbWidth,r=r.yThumbHeight,a=l.lastScrollTop,o=l.lastScrollLeft,s=i.computeXOpts,c=e.currentTarget,u=c.scrollTop,h=c.scrollLeft,m=c.clientWidth,f=c.clientHeight,d=c.scrollHeight,c=c.scrollWidth,g="",p=!1,b=!1,v=!1,T=!1;a!==u&&(t=_xeUtils.default.toNumber(i.computeYOpts.threshold)||1,a<u?(g="bottom",0<r&&d-t<=u+f&&(b=!0)):(g="top",0<r&&u<=t&&(p=!0))),o!==h&&(a=_xeUtils.default.toNumber(s.threshold)||1,o<h?(g="right",0<n&&c-a<=h+m&&(T=!0)):(g="left",0<n&&h<=a&&(v=!0))),i.updateThumbOffset(),l.lastScrollTop=u,l.lastScrollLeft=h,(b||p||T||v)&&i.dispatchEvent("scroll-boundary",{direction:g,isTop:p,isBottom:b,isLeft:v,isRight:T,scrollTop:u,scrollLeft:h,clientWidth:m,clientHeight:f,scrollHeight:d,scrollWidth:c},e),i.dispatchEvent("scroll",{direction:g,isTop:0<r&&u<=0,isBottom:0<r&&d<=u+f,isLeft:0<n&&h<=0,isRight:0<n&&c<=h+m,scrollTop:u,scrollLeft:h,clientWidth:m,clientHeight:f,scrollHeight:d,scrollWidth:c},e)},clickTrackXEvent:function(e){var t,i,r=this.reactData,l=e.currentTarget;l===e.target&&(t=this.$refs.refViewElem)&&(r=r.xThumbWidth,i=l.getBoundingClientRect(),t.scrollTo({left:(0,_util.getScrollFromClick)(e.clientX-i.left,t.clientWidth,t.scrollWidth,l.clientWidth,r),behavior:"auto"}))},clickTrackYEvent:function(e){var t,i,r=this.reactData,l=e.currentTarget;l===e.target&&(t=this.$refs.refViewElem)&&(r=r.yThumbHeight,i=l.getBoundingClientRect(),t.scrollTo({top:(0,_util.getScrollFromClick)(e.clientY-i.top,t.clientHeight,t.scrollHeight,l.clientHeight,r),behavior:"auto"}))},pointerdownThumbXEvent:function(e){var t,i=this.reactData,r=this.internalData,l=e.currentTarget,n=(r.isThumbDrag=!0,l.setPointerCapture(e.pointerId),this.$refs.refViewElem);n&&(i=i.xThumbWidth,t=(l=l.parentElement).getBoundingClientRect(),e=e.clientX-t.left,t=(0,_util.getThumbOffsetSize)(n.scrollLeft,n.clientWidth,n.scrollWidth,l.clientWidth,i),r.thumbDragOffset=e-t)},pointermoveThumbXEvent:function(e){var t,i,r=this.reactData,l=this.internalData,n=l.isThumbDrag,l=l.thumbDragOffset;n&&(n=this.$refs.refViewElem)&&(r=r.xThumbWidth,i=(t=e.currentTarget.parentElement).getBoundingClientRect(),n.scrollLeft=(0,_util.getScrollFromDrag)(e.clientX-i.left,l,n.clientWidth,n.scrollWidth,t.clientWidth,r))},cleatPointerThumbEvent:function(e){var t=this.internalData;e.currentTarget.releasePointerCapture(e.pointerId),t.isThumbDrag=!1},pointerdownThumbYEvent:function(e){var t,i=this.reactData,r=this.internalData,l=e.currentTarget,n=(r.isThumbDrag=!0,l.setPointerCapture(e.pointerId),this.$refs.refViewElem);n&&(i=i.yThumbHeight,t=(l=l.parentElement).getBoundingClientRect(),e=e.clientY-t.top,t=(0,_util.getThumbOffsetSize)(n.scrollTop,n.clientHeight,n.scrollHeight,l.clientHeight,i),r.thumbDragOffset=e-t)},pointermoveThumbYEvent:function(e){var t,i,r=this.reactData,l=this.internalData,n=l.isThumbDrag,l=l.thumbDragOffset;n&&(n=this.$refs.refViewElem)&&(r=r.yThumbHeight,i=(t=e.currentTarget.parentElement).getBoundingClientRect(),n.scrollTop=(0,_util.getScrollFromDrag)(e.clientY-i.top,l,n.clientHeight,n.scrollHeight,t.clientHeight,r))},renderVN:function(e){var t=this,i=t.$scopedSlots,r=t.native,l=t.loading,n=t.computeXOpts,a=t.computeYOpts,i=i.default;return e("div",{ref:"refElem",class:t.computeWrapperClss,style:t.computeWrapperStyle},[e("div",{ref:"refViewElem",class:t.computeViewClss,on:{scroll:t.scrollEvent}},[e("div",{ref:"refViewInnerElem",class:"vxe-scrollbar--view-inner"},t.autoResize?[e("div",{key:"vi",ref:"refViewInnerElem",class:"vxe-scrollbar--view-inner"},i?i({}):[])]:i?i({}):[])]),r||"hidden"===n.visible?renderEmptyElement(t):e("div",{ref:"refTrackXElem",class:"vxe-scrollbar--track-x",on:{click:t.clickTrackXEvent}},[e("div",{ref:"refThumbXElem",class:"vxe-scrollbar--thumb-x",on:{pointerdown:t.pointerdownThumbXEvent,pointermove:t.pointermoveThumbXEvent,pointerup:t.cleatPointerThumbEvent,pointercancel:t.cleatPointerThumbEvent,lostpointercapture:t.cleatPointerThumbEvent}})]),r||"hidden"===a.visible?renderEmptyElement(t):e("div",{ref:"refTrackYElem",class:"vxe-scrollbar--track-y",on:{click:t.clickTrackYEvent}},[e("div",{ref:"refThumbYElem",class:"vxe-scrollbar--thumb-y",on:{pointerdown:t.pointerdownThumbYEvent,pointermove:t.pointermoveThumbYEvent,pointerup:t.cleatPointerThumbEvent,pointercancel:t.cleatPointerThumbEvent,lostpointercapture:t.cleatPointerThumbEvent}})]),e(_loading.default,{class:"vxe-scrollbar--loading",props:{value:l}})])}},watch:{height:function(){this.reFlag++},width:function(){this.reFlag++},minHeight:function(){this.reFlag++},minWidth:function(){this.reFlag++},maxHeight:function(){this.reFlag++},maxWidth:function(){this.reFlag++},native:function(){this.reFlag++},syncResize:function(){this.reFlag++},reFlag:function(){var e=this;e.recalculate().then(function(){e.recalculate()})}},created:function(){this.internalData=createInternalData()},mounted:function(){var e=this,t=e,i=e.internalData,r=t.autoResize,l=e.$refs.refViewElem,n=e.$refs.refViewInnerElem;r&&(r=globalResize.create(function(){t.autoResize&&e.reFlag++}),l&&r.observe(l),n&&r.observe(n),i.resizeObserver=r),e.reFlag++},beforeDestroy:function(){var e=this.internalData.resizeObserver;e&&e.disconnect()},destroyed:function(){var e=this.reactData,t=this.internalData;_xeUtils.default.assign(e,createReactData()),_xeUtils.default.assign(t,createInternalData())},render:function(e){return this.renderVN(e)}});
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getScrollFromClick = getScrollFromClick;
7
+ exports.getScrollFromDrag = getScrollFromDrag;
8
+ exports.getThumbOffsetSize = getThumbOffsetSize;
9
+ exports.getThumbSize = getThumbSize;
10
+ /**
11
+ * 计算滚动条滑块的长度
12
+ */
13
+ function getThumbSize(viewportSize, contentSize, trackSize) {
14
+ if (contentSize <= viewportSize) {
15
+ return 0;
16
+ }
17
+ var ratio = viewportSize / contentSize;
18
+ var ideal = trackSize * ratio;
19
+ return Math.max(20, Math.min(ideal, trackSize));
20
+ }
21
+ /**
22
+ * 计算滚动条滑块的偏移位置
23
+ */
24
+ function getThumbOffsetSize(offsetSize, viewportSize, contentSize, trackSize, thumbSize) {
25
+ var maxScroll = contentSize - viewportSize;
26
+ if (maxScroll <= 0) {
27
+ return 0;
28
+ }
29
+ var maxThumbOffset = trackSize - thumbSize;
30
+ if (maxThumbOffset <= 0) {
31
+ return 0;
32
+ }
33
+ var clamped = Math.min(Math.max(offsetSize, 0), maxScroll);
34
+ var ratio = clamped / maxScroll;
35
+ return ratio * maxThumbOffset;
36
+ }
37
+ /**
38
+ * 根据点击轨道的位置,计算滑块的偏移位置
39
+ */
40
+ function getScrollFromClick(clickPosition, viewportSize, contentSize, trackSize, thumbSize) {
41
+ var maxThumbOffset = trackSize - thumbSize;
42
+ var maxScroll = contentSize - viewportSize;
43
+ if (maxScroll <= 0 || maxThumbOffset <= 0) {
44
+ return 0;
45
+ }
46
+ var thumbOffset = clickPosition - thumbSize / 2;
47
+ thumbOffset = Math.min(Math.max(thumbOffset, 0), maxThumbOffset);
48
+ var scrollOffset = thumbOffset / maxThumbOffset * maxScroll;
49
+ return scrollOffset;
50
+ }
51
+ /**
52
+ * 拖拽 thumb 时,根据鼠标位置计算滑块的偏移位置
53
+ */
54
+ function getScrollFromDrag(pointerPosition, dragOffset, viewportSize, contentSize, trackSize, thumbSize) {
55
+ var maxScroll = contentSize - viewportSize;
56
+ var maxThumbOffset = trackSize - thumbSize;
57
+ if (maxScroll <= 0 || maxThumbOffset <= 0) {
58
+ return 0;
59
+ }
60
+ var thumbOffset = pointerPosition - dragOffset;
61
+ thumbOffset = Math.min(Math.max(thumbOffset, 0), maxThumbOffset);
62
+ return thumbOffset / maxThumbOffset * maxScroll;
63
+ }