vxe-table 3.25.0-beta.1 → 3.25.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/index.css +1 -1
- package/es/index.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/src/methods.js +246 -44
- package/es/table/src/props.js +2 -1
- package/es/table/src/scrollbar.js +54 -0
- package/es/table/src/table.js +266 -64
- package/es/table/src/util.js +11 -2
- package/es/table/style.css +30 -0
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/es/vxe-table/style.css +30 -0
- package/es/vxe-table/style.min.css +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +337 -66
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/src/methods.js +21 -11
- package/lib/table/src/methods.min.js +1 -1
- package/lib/table/src/props.js +2 -1
- package/lib/table/src/props.min.js +1 -1
- package/lib/table/src/scrollbar.js +63 -0
- package/lib/table/src/scrollbar.min.js +1 -0
- package/lib/table/src/table.js +249 -52
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +11 -2
- package/lib/table/src/util.min.js +1 -1
- package/lib/table/style/style.css +30 -0
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-table/style/style.css +30 -0
- package/lib/vxe-table/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/table/src/methods.ts +258 -44
- package/packages/table/src/props.ts +2 -1
- package/packages/table/src/scrollbar.ts +57 -0
- package/packages/table/src/table.ts +300 -69
- package/packages/table/src/util.ts +15 -2
- package/styles/components/table.scss +65 -0
- /package/es/{iconfont.1791954189007.ttf → iconfont.1792035018941.ttf} +0 -0
- /package/es/{iconfont.1791954189007.woff → iconfont.1792035018941.woff} +0 -0
- /package/es/{iconfont.1791954189007.woff2 → iconfont.1792035018941.woff2} +0 -0
- /package/lib/{iconfont.1791954189007.ttf → iconfont.1792035018941.ttf} +0 -0
- /package/lib/{iconfont.1791954189007.woff → iconfont.1792035018941.woff} +0 -0
- /package/lib/{iconfont.1791954189007.woff2 → iconfont.1792035018941.woff2} +0 -0
package/es/table/src/methods.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import XEUtils from 'xe-utils';
|
|
2
2
|
import { getTpImg, isPx, isScale, hasClass, addClass, removeClass, wheelScrollLeftTo, wheelScrollTopTo, getEventTargetNode, getPaddingTopBottomSize, setScrollTop, setScrollLeft, toCssUnit, hasControlKey, checkTargetElement, hasAxternalInputTarget } from '../../ui/src/dom';
|
|
3
|
-
import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue, hasEnableConf
|
|
3
|
+
import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue, hasEnableConf } from '../../ui/src/utils';
|
|
4
4
|
import { VxeUI } from '../../ui';
|
|
5
5
|
import Cell from './cell';
|
|
6
6
|
import { getRowUniqueId, createRowId, clearTableAllStatus, getColumnList, toFilters, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, getColReMaxWidth, createHandleUpdateRowId, createHandleGetRowId, getRefElem, getCellRestHeight, getLastChildColumn, getRowMaxHeight, handleCustomStoreConfig, encodeRowid } from './util';
|
|
7
7
|
import { getSlotVNs } from '../../ui/src/vn';
|
|
8
8
|
import { moveRowAnimateToTb, clearRowAnimate, moveColAnimateToLr, clearColAnimate } from '../../ui/src/anime';
|
|
9
|
+
import { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } from './scrollbar';
|
|
9
10
|
import { createComponentLog } from '../../ui/src/log';
|
|
10
11
|
import { getCrossTableDragRowInfo } from './store';
|
|
11
12
|
const { warnLog, errLog } = createComponentLog('table');
|
|
@@ -1003,12 +1004,12 @@ function updateStyle($xeTable) {
|
|
|
1003
1004
|
emptyPlaceholderElem.style.top = `${tHeaderHeight}px`;
|
|
1004
1005
|
emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : '';
|
|
1005
1006
|
}
|
|
1006
|
-
const
|
|
1007
|
-
const
|
|
1007
|
+
const scrollXVisible = $xeTable.computeScrollXVisible;
|
|
1008
|
+
const scrollYVisible = $xeTable.computeScrollYVisible;
|
|
1008
1009
|
const scrollbarYToLeft = $xeTable.computeScrollbarYToLeft;
|
|
1009
1010
|
let xScrollbarVisible = overflowX ? 'visible' : 'hidden';
|
|
1010
|
-
const hideXScroll =
|
|
1011
|
-
if (
|
|
1011
|
+
const hideXScroll = scrollXVisible === false || scrollXVisible === 'hidden';
|
|
1012
|
+
if (scrollXVisible === 'visible' || $xeGanttView) {
|
|
1012
1013
|
osbHeight = scrollbarHeight;
|
|
1013
1014
|
xScrollbarVisible = 'visible';
|
|
1014
1015
|
}
|
|
@@ -1017,12 +1018,12 @@ function updateStyle($xeTable) {
|
|
|
1017
1018
|
xScrollbarVisible = 'hidden';
|
|
1018
1019
|
}
|
|
1019
1020
|
let yScrollbarVisible = overflowY ? 'visible' : 'hidden';
|
|
1020
|
-
const
|
|
1021
|
-
if (
|
|
1021
|
+
const hideYScroll = scrollYVisible === false || scrollYVisible === 'hidden';
|
|
1022
|
+
if (hideYScroll || (($xeGantt && $xeGanttView && $xeGantt.reactData.showRightView) && !scrollbarYToLeft)) {
|
|
1022
1023
|
osbWidth = 0;
|
|
1023
1024
|
yScrollbarVisible = 'hidden';
|
|
1024
1025
|
}
|
|
1025
|
-
else if (
|
|
1026
|
+
else if (scrollYVisible === 'visible') {
|
|
1026
1027
|
osbWidth = scrollbarWidth;
|
|
1027
1028
|
yScrollbarVisible = 'visible';
|
|
1028
1029
|
}
|
|
@@ -2350,14 +2351,6 @@ function autoCellWidth($xeTable) {
|
|
|
2350
2351
|
if (!bodyWrapperElem) {
|
|
2351
2352
|
return;
|
|
2352
2353
|
}
|
|
2353
|
-
const yHandleEl = $xeTable.$refs.refScrollYHandleElem;
|
|
2354
|
-
if (!yHandleEl) {
|
|
2355
|
-
return;
|
|
2356
|
-
}
|
|
2357
|
-
const xHandleEl = $xeTable.$refs.refScrollXHandleElem;
|
|
2358
|
-
if (!xHandleEl) {
|
|
2359
|
-
return;
|
|
2360
|
-
}
|
|
2361
2354
|
const columnOpts = $xeTable.computeColumnOpts;
|
|
2362
2355
|
let tWidth = 0;
|
|
2363
2356
|
const minCellWidth = 40; // 列宽最少限制 40px
|
|
@@ -3028,12 +3021,10 @@ function computeScrollLoad($xeTable) {
|
|
|
3028
3021
|
});
|
|
3029
3022
|
}
|
|
3030
3023
|
function calcScrollbar($xeTable) {
|
|
3031
|
-
const scrollDefaultConf = $xeTable.scrollDefaultConf;
|
|
3032
3024
|
const reactData = $xeTable;
|
|
3033
3025
|
const internalData = $xeTable;
|
|
3034
3026
|
const { scrollXWidth, scrollYHeight } = reactData;
|
|
3035
3027
|
const { elemStore } = internalData;
|
|
3036
|
-
const scrollbarOpts = $xeTable.computeScrollbarOpts;
|
|
3037
3028
|
const el = $xeTable.$refs.refElem;
|
|
3038
3029
|
if (!el || !el.clientWidth) {
|
|
3039
3030
|
return;
|
|
@@ -3043,23 +3034,31 @@ function calcScrollbar($xeTable) {
|
|
|
3043
3034
|
const footerTableElem = getRefElem(elemStore['main-footer-table']);
|
|
3044
3035
|
const xHandleEl = $xeTable.$refs.refScrollXHandleElem;
|
|
3045
3036
|
const yHandleEl = $xeTable.$refs.refScrollYHandleElem;
|
|
3037
|
+
const thumbXElem = $xeTable.$refs.refThumbXElem;
|
|
3038
|
+
const thumbYElem = $xeTable.$refs.refThumbYElem;
|
|
3046
3039
|
let overflowY = false;
|
|
3047
3040
|
let overflowX = false;
|
|
3048
3041
|
if (bodyWrapperElem) {
|
|
3049
|
-
const
|
|
3050
|
-
const
|
|
3051
|
-
const
|
|
3052
|
-
const barHeight = XEUtils.toNumber(getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), scrollDefaultConf.height));
|
|
3042
|
+
const scrollbarOpts = $xeTable.computeScrollbarOpts;
|
|
3043
|
+
const barWidth = $xeTable.computeScrollYWidth;
|
|
3044
|
+
const barHeight = $xeTable.computeScrollXHeight;
|
|
3053
3045
|
overflowY = scrollYHeight > bodyWrapperElem.clientHeight;
|
|
3054
|
-
|
|
3046
|
+
// 如果是虚拟滚动条
|
|
3047
|
+
if (thumbYElem) {
|
|
3048
|
+
reactData.scrollbarHeight = scrollbarOpts.padding ? thumbYElem.offsetWidth : 0;
|
|
3049
|
+
}
|
|
3050
|
+
else if (yHandleEl) {
|
|
3055
3051
|
reactData.scrollbarWidth = (barWidth || barHeight) || (yHandleEl.offsetWidth - yHandleEl.clientWidth) || 14;
|
|
3056
3052
|
}
|
|
3057
3053
|
reactData.overflowY = overflowY;
|
|
3058
3054
|
overflowX = scrollXWidth > bodyWrapperElem.clientWidth;
|
|
3059
|
-
|
|
3055
|
+
// 如果是虚拟滚动条
|
|
3056
|
+
if (thumbXElem) {
|
|
3057
|
+
reactData.scrollbarHeight = scrollbarOpts.padding ? thumbXElem.offsetHeight : 0;
|
|
3058
|
+
}
|
|
3059
|
+
else if (xHandleEl) {
|
|
3060
3060
|
reactData.scrollbarHeight = (barHeight || barWidth) || (xHandleEl.offsetHeight - xHandleEl.clientHeight) || 14;
|
|
3061
3061
|
}
|
|
3062
|
-
reactData.overflowX = overflowX;
|
|
3063
3062
|
const hHeight = headerTableElem ? headerTableElem.clientHeight : 0;
|
|
3064
3063
|
const fHeight = footerTableElem ? footerTableElem.clientHeight : 0;
|
|
3065
3064
|
internalData.tableHeight = bodyWrapperElem.offsetHeight;
|
|
@@ -3147,6 +3146,7 @@ function handleLazyRecalculate($xeTable, reFull, reWidth, reHeight, options) {
|
|
|
3147
3146
|
const refreshDelay = resizeOpts.refreshDelay || 30;
|
|
3148
3147
|
const reDelay = rceDelay + refreshDelay;
|
|
3149
3148
|
const el = $xeTable.$refs.refElem;
|
|
3149
|
+
$xeTable.updateScrollbar();
|
|
3150
3150
|
if (el && el.clientWidth) {
|
|
3151
3151
|
autoCellWidth($xeTable);
|
|
3152
3152
|
updateRowExpandStyle($xeTable);
|
|
@@ -9949,6 +9949,14 @@ const tableMethods = {
|
|
|
9949
9949
|
}
|
|
9950
9950
|
return $xeTable.$nextTick();
|
|
9951
9951
|
},
|
|
9952
|
+
/**
|
|
9953
|
+
* @private
|
|
9954
|
+
*/
|
|
9955
|
+
updateScrollbar() {
|
|
9956
|
+
const $xeTable = this;
|
|
9957
|
+
$xeTable.updateThumbSize();
|
|
9958
|
+
$xeTable.updateThumbOffset();
|
|
9959
|
+
},
|
|
9952
9960
|
/**
|
|
9953
9961
|
* 表头单元格按下事件
|
|
9954
9962
|
*/
|
|
@@ -12255,19 +12263,18 @@ const tableMethods = {
|
|
|
12255
12263
|
const props = $xeTable;
|
|
12256
12264
|
const internalData = $xeTable;
|
|
12257
12265
|
const { highlightHoverRow } = props;
|
|
12258
|
-
const { lastScrollLeft, lastScrollTop } = internalData;
|
|
12259
|
-
const
|
|
12260
|
-
|
|
12261
|
-
if (!xHandleEl || !yHandleEl) {
|
|
12266
|
+
const { elemStore, lastScrollLeft, lastScrollTop } = internalData;
|
|
12267
|
+
const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
|
|
12268
|
+
if (!bodyScrollElem) {
|
|
12262
12269
|
return;
|
|
12263
12270
|
}
|
|
12264
12271
|
const rowOpts = $xeTable.computeRowOpts;
|
|
12265
12272
|
const validTip = $xeTable.$refs.refValidTooltip;
|
|
12266
12273
|
const tooltip = $xeTable.$refs.refTooltip;
|
|
12267
|
-
const bodyHeight =
|
|
12268
|
-
const bodyWidth =
|
|
12269
|
-
const scrollHeight =
|
|
12270
|
-
const scrollWidth =
|
|
12274
|
+
const bodyHeight = bodyScrollElem.clientHeight;
|
|
12275
|
+
const bodyWidth = bodyScrollElem.clientWidth;
|
|
12276
|
+
const scrollHeight = bodyScrollElem.scrollHeight;
|
|
12277
|
+
const scrollWidth = bodyScrollElem.scrollWidth;
|
|
12271
12278
|
let isTop = false;
|
|
12272
12279
|
let isBottom = false;
|
|
12273
12280
|
let isLeft = false;
|
|
@@ -12329,6 +12336,7 @@ const tableMethods = {
|
|
|
12329
12336
|
isLeft,
|
|
12330
12337
|
isRight,
|
|
12331
12338
|
direction }, params);
|
|
12339
|
+
$xeTable.updateThumbOffset();
|
|
12332
12340
|
updateRowExpandStyle($xeTable);
|
|
12333
12341
|
checkLastSyncScroll($xeTable, isRollX, isRollY);
|
|
12334
12342
|
if (isRollX) {
|
|
@@ -12376,8 +12384,10 @@ const tableMethods = {
|
|
|
12376
12384
|
},
|
|
12377
12385
|
triggerBodyScrollEvent(evnt, fixedType) {
|
|
12378
12386
|
const $xeTable = this;
|
|
12387
|
+
const props = $xeTable;
|
|
12379
12388
|
const reactData = $xeTable;
|
|
12380
12389
|
const internalData = $xeTable;
|
|
12390
|
+
const { useScrollbar } = props;
|
|
12381
12391
|
const { scrollYLoad, scrollXLoad } = reactData;
|
|
12382
12392
|
const { elemStore, intoRunScroll, lastScrollTop, lastScrollLeft, inWheelScroll, inVirtualScroll, inHeaderScroll, inBodyScroll, scrollRenderType, inFooterScroll } = internalData;
|
|
12383
12393
|
if (inWheelScroll || inVirtualScroll || inHeaderScroll || inFooterScroll) {
|
|
@@ -12397,19 +12407,21 @@ const tableMethods = {
|
|
|
12397
12407
|
if (!bodyScrollElem) {
|
|
12398
12408
|
return;
|
|
12399
12409
|
}
|
|
12400
|
-
if (!
|
|
12401
|
-
|
|
12402
|
-
|
|
12403
|
-
|
|
12404
|
-
|
|
12410
|
+
if (!useScrollbar) {
|
|
12411
|
+
if (!xHandleEl) {
|
|
12412
|
+
return;
|
|
12413
|
+
}
|
|
12414
|
+
if (!yHandleEl) {
|
|
12415
|
+
return;
|
|
12416
|
+
}
|
|
12405
12417
|
}
|
|
12406
12418
|
if (inBodyScroll) {
|
|
12407
12419
|
if (scrollRenderType !== fixedType) {
|
|
12408
12420
|
return;
|
|
12409
12421
|
}
|
|
12410
12422
|
}
|
|
12411
|
-
let scrollTop =
|
|
12412
|
-
let scrollLeft =
|
|
12423
|
+
let scrollTop = 0;
|
|
12424
|
+
let scrollLeft = 0;
|
|
12413
12425
|
if (leftScrollElem && fixedType === 'left') {
|
|
12414
12426
|
scrollTop = leftScrollElem.scrollTop;
|
|
12415
12427
|
}
|
|
@@ -12561,8 +12573,8 @@ const tableMethods = {
|
|
|
12561
12573
|
const rightFixedWidth = $xeTable.computeRightFixedWidth;
|
|
12562
12574
|
const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
|
|
12563
12575
|
const rowOpts = $xeTable.computeRowOpts;
|
|
12564
|
-
const
|
|
12565
|
-
const
|
|
12576
|
+
const scrollXVisible = $xeTable.computeScrollXVisible;
|
|
12577
|
+
const scrollYVisible = $xeTable.computeScrollYVisible;
|
|
12566
12578
|
const xHandleEl = $xeTable.$refs.refScrollXHandleElem;
|
|
12567
12579
|
const yHandleEl = $xeTable.$refs.refScrollYHandleElem;
|
|
12568
12580
|
const leftScrollElem = getRefElem(elemStore['left-body-scroll']);
|
|
@@ -12585,14 +12597,14 @@ const tableMethods = {
|
|
|
12585
12597
|
const isRollY = overflowY && scrollTop !== lastScrollTop;
|
|
12586
12598
|
if (isRollX) {
|
|
12587
12599
|
// 如果禁用滚动
|
|
12588
|
-
if (
|
|
12600
|
+
if (scrollXVisible === false || scrollXVisible === 'hidden') {
|
|
12589
12601
|
evnt.preventDefault();
|
|
12590
12602
|
return;
|
|
12591
12603
|
}
|
|
12592
12604
|
}
|
|
12593
12605
|
if (isRollY) {
|
|
12594
12606
|
// 如果禁用滚动
|
|
12595
|
-
if (
|
|
12607
|
+
if (scrollYVisible === false || scrollYVisible === 'hidden') {
|
|
12596
12608
|
evnt.preventDefault();
|
|
12597
12609
|
return;
|
|
12598
12610
|
}
|
|
@@ -13541,6 +13553,196 @@ const tableMethods = {
|
|
|
13541
13553
|
const $xeTable = this;
|
|
13542
13554
|
return $xeTable.handleClearStack();
|
|
13543
13555
|
},
|
|
13556
|
+
// 滚动条
|
|
13557
|
+
updateThumbSize() {
|
|
13558
|
+
const $xeTable = this;
|
|
13559
|
+
const reactData = $xeTable;
|
|
13560
|
+
const internalData = $xeTable;
|
|
13561
|
+
const { elemStore } = internalData;
|
|
13562
|
+
const viewEl = getRefElem(elemStore['main-body-scroll']);
|
|
13563
|
+
if (!viewEl) {
|
|
13564
|
+
return;
|
|
13565
|
+
}
|
|
13566
|
+
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
13567
|
+
return;
|
|
13568
|
+
}
|
|
13569
|
+
const trackXEl = $xeTable.$refs.refTrackXElem;
|
|
13570
|
+
const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
|
|
13571
|
+
const thumbXElem = $xeTable.$refs.refThumbXElem;
|
|
13572
|
+
if (thumbXElem) {
|
|
13573
|
+
thumbXElem.style.width = xThumbWidth + 'px';
|
|
13574
|
+
}
|
|
13575
|
+
reactData.xThumbWidth = xThumbWidth;
|
|
13576
|
+
const trackYEl = $xeTable.$refs.refTrackYElem;
|
|
13577
|
+
const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
|
|
13578
|
+
const thumbYElem = $xeTable.$refs.refThumbYElem;
|
|
13579
|
+
if (thumbYElem) {
|
|
13580
|
+
thumbYElem.style.height = yThumbHeight + 'px';
|
|
13581
|
+
}
|
|
13582
|
+
reactData.yThumbHeight = yThumbHeight;
|
|
13583
|
+
},
|
|
13584
|
+
updateThumbOffset() {
|
|
13585
|
+
const $xeTable = this;
|
|
13586
|
+
const reactData = $xeTable;
|
|
13587
|
+
const internalData = $xeTable;
|
|
13588
|
+
const { elemStore } = internalData;
|
|
13589
|
+
const viewEl = getRefElem(elemStore['main-body-scroll']);
|
|
13590
|
+
if (!viewEl) {
|
|
13591
|
+
return;
|
|
13592
|
+
}
|
|
13593
|
+
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
13594
|
+
return;
|
|
13595
|
+
}
|
|
13596
|
+
const { xThumbWidth, yThumbHeight } = reactData;
|
|
13597
|
+
const trackXEl = $xeTable.$refs.refTrackXElem;
|
|
13598
|
+
const thumbXElem = $xeTable.$refs.refThumbXElem;
|
|
13599
|
+
const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
|
|
13600
|
+
internalData.xThumbLeft = xThumbLeft;
|
|
13601
|
+
if (thumbXElem && xThumbWidth) {
|
|
13602
|
+
thumbXElem.style.width = xThumbWidth + 'px';
|
|
13603
|
+
thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
|
|
13604
|
+
}
|
|
13605
|
+
const trackYEl = $xeTable.$refs.refTrackYElem;
|
|
13606
|
+
const thumbYElem = $xeTable.$refs.refThumbYElem;
|
|
13607
|
+
const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
|
|
13608
|
+
internalData.yThumbTop = yThumbTop;
|
|
13609
|
+
if (thumbYElem && yThumbHeight) {
|
|
13610
|
+
thumbYElem.style.height = yThumbHeight + 'px';
|
|
13611
|
+
thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
|
|
13612
|
+
}
|
|
13613
|
+
},
|
|
13614
|
+
clickTrackXEvent(evnt) {
|
|
13615
|
+
const $xeTable = this;
|
|
13616
|
+
const reactData = $xeTable;
|
|
13617
|
+
const internalData = $xeTable;
|
|
13618
|
+
const { elemStore } = internalData;
|
|
13619
|
+
const trackEl = evnt.currentTarget;
|
|
13620
|
+
if (trackEl !== evnt.target) {
|
|
13621
|
+
return;
|
|
13622
|
+
}
|
|
13623
|
+
const viewEl = getRefElem(elemStore['main-body-scroll']);
|
|
13624
|
+
if (!viewEl) {
|
|
13625
|
+
return;
|
|
13626
|
+
}
|
|
13627
|
+
const { xThumbWidth } = reactData;
|
|
13628
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
13629
|
+
viewEl.scrollTo({
|
|
13630
|
+
left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
|
|
13631
|
+
behavior: 'auto'
|
|
13632
|
+
});
|
|
13633
|
+
},
|
|
13634
|
+
clickTrackYEvent(evnt) {
|
|
13635
|
+
const $xeTable = this;
|
|
13636
|
+
const reactData = $xeTable;
|
|
13637
|
+
const internalData = $xeTable;
|
|
13638
|
+
const trackEl = evnt.currentTarget;
|
|
13639
|
+
if (trackEl !== evnt.target) {
|
|
13640
|
+
return;
|
|
13641
|
+
}
|
|
13642
|
+
const { elemStore } = internalData;
|
|
13643
|
+
const viewEl = getRefElem(elemStore['main-body-scroll']);
|
|
13644
|
+
if (!viewEl) {
|
|
13645
|
+
return;
|
|
13646
|
+
}
|
|
13647
|
+
const { yThumbHeight } = reactData;
|
|
13648
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
13649
|
+
viewEl.scrollTo({
|
|
13650
|
+
top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
|
|
13651
|
+
behavior: 'auto'
|
|
13652
|
+
});
|
|
13653
|
+
},
|
|
13654
|
+
pointerdownThumbXEvent(evnt) {
|
|
13655
|
+
const $xeTable = this;
|
|
13656
|
+
const reactData = $xeTable;
|
|
13657
|
+
const internalData = $xeTable;
|
|
13658
|
+
const { elemStore } = internalData;
|
|
13659
|
+
const thumbEl = evnt.currentTarget;
|
|
13660
|
+
internalData.isThumbDrag = true;
|
|
13661
|
+
thumbEl.setPointerCapture(evnt.pointerId);
|
|
13662
|
+
const viewEl = getRefElem(elemStore['main-body-scroll']);
|
|
13663
|
+
if (!viewEl) {
|
|
13664
|
+
return;
|
|
13665
|
+
}
|
|
13666
|
+
const { xThumbWidth } = reactData;
|
|
13667
|
+
const trackEl = thumbEl.parentElement;
|
|
13668
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
13669
|
+
const pointerPosition = evnt.clientX - trackRect.left;
|
|
13670
|
+
// 记录 thumb 的偏移
|
|
13671
|
+
const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
|
|
13672
|
+
internalData.thumbDragOffset = pointerPosition - thumbOffset;
|
|
13673
|
+
},
|
|
13674
|
+
pointermoveThumbXEvent(evnt) {
|
|
13675
|
+
const $xeTable = this;
|
|
13676
|
+
const reactData = $xeTable;
|
|
13677
|
+
const internalData = $xeTable;
|
|
13678
|
+
const thumbEl = evnt.currentTarget;
|
|
13679
|
+
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
13680
|
+
return;
|
|
13681
|
+
}
|
|
13682
|
+
const { elemStore, isThumbDrag, thumbDragOffset } = internalData;
|
|
13683
|
+
if (isThumbDrag) {
|
|
13684
|
+
const viewEl = getRefElem(elemStore['main-body-scroll']);
|
|
13685
|
+
if (!viewEl) {
|
|
13686
|
+
return;
|
|
13687
|
+
}
|
|
13688
|
+
const { xThumbWidth } = reactData;
|
|
13689
|
+
const thumbEl = evnt.currentTarget;
|
|
13690
|
+
const trackEl = thumbEl.parentElement;
|
|
13691
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
13692
|
+
// 更新偏移
|
|
13693
|
+
viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
|
|
13694
|
+
}
|
|
13695
|
+
},
|
|
13696
|
+
cleatPointerThumbEvent(evnt) {
|
|
13697
|
+
const $xeTable = this;
|
|
13698
|
+
const internalData = $xeTable;
|
|
13699
|
+
const thumbEl = evnt.currentTarget;
|
|
13700
|
+
thumbEl.releasePointerCapture(evnt.pointerId);
|
|
13701
|
+
internalData.isThumbDrag = false;
|
|
13702
|
+
},
|
|
13703
|
+
pointerdownThumbYEvent(evnt) {
|
|
13704
|
+
const $xeTable = this;
|
|
13705
|
+
const reactData = $xeTable;
|
|
13706
|
+
const internalData = $xeTable;
|
|
13707
|
+
const { elemStore } = internalData;
|
|
13708
|
+
const thumbEl = evnt.currentTarget;
|
|
13709
|
+
internalData.isThumbDrag = true;
|
|
13710
|
+
thumbEl.setPointerCapture(evnt.pointerId);
|
|
13711
|
+
const viewEl = getRefElem(elemStore['main-body-scroll']);
|
|
13712
|
+
if (!viewEl) {
|
|
13713
|
+
return;
|
|
13714
|
+
}
|
|
13715
|
+
const { yThumbHeight } = reactData;
|
|
13716
|
+
const trackEl = thumbEl.parentElement;
|
|
13717
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
13718
|
+
const pointerPosition = evnt.clientY - trackRect.top;
|
|
13719
|
+
// 记录 thumb 的偏移
|
|
13720
|
+
const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
|
|
13721
|
+
internalData.thumbDragOffset = pointerPosition - thumbOffset;
|
|
13722
|
+
},
|
|
13723
|
+
pointermoveThumbYEvent(evnt) {
|
|
13724
|
+
const $xeTable = this;
|
|
13725
|
+
const reactData = $xeTable;
|
|
13726
|
+
const internalData = $xeTable;
|
|
13727
|
+
const thumbEl = evnt.currentTarget;
|
|
13728
|
+
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
13729
|
+
return;
|
|
13730
|
+
}
|
|
13731
|
+
const { elemStore, isThumbDrag, thumbDragOffset } = internalData;
|
|
13732
|
+
if (isThumbDrag) {
|
|
13733
|
+
const viewEl = getRefElem(elemStore['main-body-scroll']);
|
|
13734
|
+
if (!viewEl) {
|
|
13735
|
+
return;
|
|
13736
|
+
}
|
|
13737
|
+
const { yThumbHeight } = reactData;
|
|
13738
|
+
const thumbEl = evnt.currentTarget;
|
|
13739
|
+
const trackEl = thumbEl.parentElement;
|
|
13740
|
+
const trackRect = trackEl.getBoundingClientRect();
|
|
13741
|
+
// 更新偏移
|
|
13742
|
+
viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
|
|
13743
|
+
}
|
|
13744
|
+
},
|
|
13745
|
+
// 滚动条
|
|
13544
13746
|
dispatchEvent(type, params, evnt) {
|
|
13545
13747
|
const $xeTable = this;
|
|
13546
13748
|
const $xeGrid = $xeTable.$xeGrid;
|
package/es/table/src/props.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { VxeUI } from '../../ui';
|
|
2
|
+
import { getDefaultConfig } from '../../ui/src/utils';
|
|
2
3
|
const { getConfig } = VxeUI;
|
|
3
4
|
export const tableProps = {
|
|
4
5
|
/** 基本属性 */
|
|
@@ -294,7 +295,7 @@ export const tableProps = {
|
|
|
294
295
|
virtualYConfig: Object,
|
|
295
296
|
useScrollbar: {
|
|
296
297
|
type: Boolean,
|
|
297
|
-
default: () => getConfig().table.useScrollbar
|
|
298
|
+
default: () => getDefaultConfig(getConfig().table.useScrollbar, getConfig().useScrollbar)
|
|
298
299
|
},
|
|
299
300
|
// 滚动条配置项
|
|
300
301
|
scrollbarConfig: Object,
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 计算滚动条滑块的长度
|
|
3
|
+
*/
|
|
4
|
+
export function getThumbSize(viewportSize, contentSize, trackSize) {
|
|
5
|
+
if (contentSize <= viewportSize) {
|
|
6
|
+
return 0;
|
|
7
|
+
}
|
|
8
|
+
const ratio = viewportSize / contentSize;
|
|
9
|
+
const ideal = trackSize * ratio;
|
|
10
|
+
return Math.max(20, Math.min(ideal, trackSize));
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* 计算滚动条滑块的偏移位置
|
|
14
|
+
*/
|
|
15
|
+
export function getThumbOffsetSize(offsetSize, viewportSize, contentSize, trackSize, thumbSize) {
|
|
16
|
+
const maxScroll = contentSize - viewportSize;
|
|
17
|
+
if (maxScroll <= 0) {
|
|
18
|
+
return 0;
|
|
19
|
+
}
|
|
20
|
+
const maxThumbOffset = trackSize - thumbSize;
|
|
21
|
+
if (maxThumbOffset <= 0) {
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
const clamped = Math.min(Math.max(offsetSize, 0), maxScroll);
|
|
25
|
+
const ratio = clamped / maxScroll;
|
|
26
|
+
return ratio * maxThumbOffset;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 根据点击轨道的位置,计算滑块的偏移位置
|
|
30
|
+
*/
|
|
31
|
+
export function getScrollFromClick(clickPosition, viewportSize, contentSize, trackSize, thumbSize) {
|
|
32
|
+
const maxThumbOffset = trackSize - thumbSize;
|
|
33
|
+
const maxScroll = contentSize - viewportSize;
|
|
34
|
+
if (maxScroll <= 0 || maxThumbOffset <= 0) {
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
37
|
+
let thumbOffset = clickPosition - thumbSize / 2;
|
|
38
|
+
thumbOffset = Math.min(Math.max(thumbOffset, 0), maxThumbOffset);
|
|
39
|
+
const scrollOffset = (thumbOffset / maxThumbOffset) * maxScroll;
|
|
40
|
+
return scrollOffset;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 拖拽 thumb 时,根据鼠标位置计算滑块的偏移位置
|
|
44
|
+
*/
|
|
45
|
+
export function getScrollFromDrag(pointerPosition, dragOffset, viewportSize, contentSize, trackSize, thumbSize) {
|
|
46
|
+
const maxScroll = contentSize - viewportSize;
|
|
47
|
+
const maxThumbOffset = trackSize - thumbSize;
|
|
48
|
+
if (maxScroll <= 0 || maxThumbOffset <= 0) {
|
|
49
|
+
return 0;
|
|
50
|
+
}
|
|
51
|
+
let thumbOffset = pointerPosition - dragOffset;
|
|
52
|
+
thumbOffset = Math.min(Math.max(thumbOffset, 0), maxThumbOffset);
|
|
53
|
+
return (thumbOffset / maxThumbOffset) * maxScroll;
|
|
54
|
+
}
|