From c2c809bc7308484be8d1fc963d52a0141e17b77e Mon Sep 17 00:00:00 2001
From: xuliangzhan
Date: Mon, 5 Apr 2021 22:08:53 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=B7=B2=E7=9F=A5=E9=97=AE?=
=?UTF-8?q?=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitignore | 1 +
README.en.md | 6 -
README.md | 6 -
README.zh-TW.md | 6 -
examples/api/table.js | 9 ++
.../views/table/scroll/ScrollFullRows.vue | 7 +-
package.json | 2 +-
packages/edit/src/mixin.js | 3 +-
packages/export/src/mixin.js | 3 +-
packages/form/src/form.js | 3 +-
packages/input/src/input.js | 2 +-
packages/keyboard/src/mixin.js | 3 +-
packages/list/src/list.js | 5 +-
packages/switch/src/switch.js | 3 +-
packages/table/src/body.js | 130 +++++++++++++++---
packages/table/src/methods.js | 8 +-
packages/tools/src/dom.js | 4 +-
packages/tools/src/event.js | 3 +-
packages/validator/src/mixin.js | 2 +-
19 files changed, 148 insertions(+), 58 deletions(-)
diff --git a/.gitignore b/.gitignore
index 27c60ce7b..1c33289d7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
.DS_Store
node_modules
/dist
+/es
/lib
/docs
/public/v1
diff --git a/README.en.md b/README.en.md
index 67f112ea7..8c1752b0c 100644
--- a/README.en.md
+++ b/README.en.md
@@ -143,12 +143,6 @@ export default {
👉 [View example](https://x-extends.github.io/vxe-table/#/table/base/basic)
👉 [View API](https://x-extends.github.io/vxe-table/#/table/api)
-## Support the author
-
-If the open source software is helpful to you, you can scan the QR code below to support us.☕
-
-👉 [Supports the author💰](https://x-extends.github.io/vxe-table/#/donation/api)
-
## License
[MIT](LICENSE) © 2019-present, Xu Liangzhan
diff --git a/README.md b/README.md
index d14c7977d..6e722c003 100644
--- a/README.md
+++ b/README.md
@@ -143,12 +143,6 @@ export default {
👉 [查看演示](https://xuliangzhan_admin.gitee.io/vxe-table/#/table/base/basic) [👀备用地址](https://x-extends.github.io/vxe-table/#/table/base/basic)
👉 [查看文档](https://xuliangzhan_admin.gitee.io/vxe-table/#/table/api) [👀备用地址](https://x-extends.github.io/vxe-table/#/table/api)
-## 支持作者
-
-如果该开源软件对您有所帮助,可以扫下方二维码支持我们。☕
-
-👉 [支持作者💰](https://xuliangzhan_admin.gitee.io/vxe-table/#/donation/api)
-
## License
[MIT](LICENSE) © 2019-present, Xu Liangzhan
diff --git a/README.zh-TW.md b/README.zh-TW.md
index 2ce0b2034..9017dbd98 100644
--- a/README.zh-TW.md
+++ b/README.zh-TW.md
@@ -143,12 +143,6 @@ export default {
👉 [查看演示](https://xuliangzhan_admin.gitee.io/vxe-table/#/table/base/basic) [👀備用地址](https://x-extends.github.io/vxe-table/#/table/base/basic)
👉 [查看檔案](https://xuliangzhan_admin.gitee.io/vxe-table/#/table/api) [👀備用地址](https://x-extends.github.io/vxe-table/#/table/api)
-## 支持作者
-
-如果該開源軟件對您有所幫助,可以掃下方二維碼支持我們。☕
-
-👉 [支持作者💰](https://xuliangzhan_admin.gitee.io/vxe-table/#/donation/api)
-
## License
[MIT](LICENSE) © 2019-present, Xu Liangzhan
diff --git a/examples/api/table.js b/examples/api/table.js
index 147fa6d6f..21c775bb5 100644
--- a/examples/api/table.js
+++ b/examples/api/table.js
@@ -2654,6 +2654,15 @@ const apis = [
defVal: 'true',
list: []
},
+ // {
+ // name: 'mode',
+ // desc: '滚动模式',
+ // version: '3.2.10',
+ // type: 'string',
+ // enum: 'default,wheel',
+ // defVal: 'default',
+ // list: []
+ // },
{
name: 'gt',
desc: '指定大于指定行时自动启动纵向虚拟滚动,如果为 0 则总是启用,如果为 -1 则关闭(注:启用纵向虚拟滚动之后将不能支持动态行高)',
diff --git a/examples/views/table/scroll/ScrollFullRows.vue b/examples/views/table/scroll/ScrollFullRows.vue
index eb16c733e..abd2b755b 100644
--- a/examples/views/table/scroll/ScrollFullRows.vue
+++ b/examples/views/table/scroll/ScrollFullRows.vue
@@ -4,6 +4,7 @@
虚拟滚动渲染,左右固定列(最大可以支撑 5w 列、30w 行)
大数据不建议使用双向绑定的 data 属性(vue 监听会大数据会短暂的卡顿),建议使用 / 函数
对于多选 type= 当数据量海量时应该绑定 属性渲染速度更快
+ 但使用较复杂的渲染时,可以设置滚动模式 scroll-y.mode='wheel' 来开启模拟滚动,降低缓冲效果
(注:启用纵向虚拟滚的后不支持动态行高;如果需要支持,将虚拟滚动关闭即可)
@@ -31,7 +32,8 @@
:export-config="{}"
:loading="loading"
:sort-config="{trigger: 'cell'}"
- :checkbox-config="{checkField: 'checked'}">
+ :checkbox-config="{checkField: 'checked'}"
+ :scroll-y="{mode: 'wheel'}">
@@ -109,7 +111,8 @@ export default {
:export-config="{}"
:loading="loading"
:sort-config="{trigger: 'cell'}"
- :checkbox-config="{checkField: 'checked'}">
+ :checkbox-config="{checkField: 'checked'}"
+ :scroll-y="{mode: 'wheel'}">
diff --git a/package.json b/package.json
index ac5f902d2..10a0f25ed 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "vxe-table",
- "version": "3.2.9",
+ "version": "3.2.10-beta.1",
"description": "一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等...",
"scripts": {
"serve": "vue-cli-service serve",
diff --git a/packages/edit/src/mixin.js b/packages/edit/src/mixin.js
index 685dc9c7d..ad28f94b8 100644
--- a/packages/edit/src/mixin.js
+++ b/packages/edit/src/mixin.js
@@ -1,6 +1,7 @@
import XEUtils from 'xe-utils'
import VXETable from '../../v-x-e-table'
import { UtilTools, DomTools, isEnableConf } from '../../tools'
+import { browse } from '../../tools/src/dom'
export default {
methods: {
@@ -404,7 +405,7 @@ export default {
inputElem.select()
} else {
// 保持一致行为,光标移到末端
- if (DomTools.browse.msie) {
+ if (browse.msie) {
const textRange = inputElem.createTextRange()
textRange.collapse(false)
textRange.select()
diff --git a/packages/export/src/mixin.js b/packages/export/src/mixin.js
index 60a9974de..df2e01d1b 100644
--- a/packages/export/src/mixin.js
+++ b/packages/export/src/mixin.js
@@ -3,6 +3,7 @@ import GlobalConfig from '../../v-x-e-table/src/conf'
import VXETable from '../../v-x-e-table'
import { UtilTools, DomTools } from '../../tools'
import { mergeBodyMethod } from '../../table/src/util'
+import { browse } from '../../tools/src/dom'
const { formatText } = UtilTools
@@ -927,7 +928,7 @@ export function handlePrint ($xetable, opts, content) {
}
content = createHtmlPage(opts, content)
const blob = getExportBlobByContent(content, opts)
- if (DomTools.browse.msie) {
+ if (browse.msie) {
if (printFrame) {
try {
printFrame.contentDocument.write('')
diff --git a/packages/form/src/form.js b/packages/form/src/form.js
index 19fda0f1e..e48cefb4a 100644
--- a/packages/form/src/form.js
+++ b/packages/form/src/form.js
@@ -4,6 +4,7 @@ import vSize from '../../mixins/size'
import VXETable from '../../v-x-e-table'
import { UtilTools, DomTools, isEnableConf } from '../../tools'
import { createItem } from './util'
+import { browse } from '../../tools/src/dom'
class Rule {
constructor (rule) {
@@ -612,7 +613,7 @@ export default {
if (inputElem) {
inputElem.focus()
// 保持一致行为,光标移到末端
- if (DomTools.browse.msie) {
+ if (browse.msie) {
const textRange = inputElem.createTextRange()
textRange.collapse(false)
textRange.select()
diff --git a/packages/input/src/input.js b/packages/input/src/input.js
index 7dfa0e4b9..7271add22 100644
--- a/packages/input/src/input.js
+++ b/packages/input/src/input.js
@@ -2,8 +2,8 @@ import XEUtils from 'xe-utils'
import GlobalConfig from '../../v-x-e-table/src/conf'
import vSize from '../../mixins/size'
import { UtilTools, DomTools, GlobalEvent } from '../../tools'
+import { browse } from '../../tools/src/dom'
-const browse = DomTools.browse
const wheelName = browse.firefox ? 'DOMMouseScroll' : 'mousewheel'
const yearSize = 20
diff --git a/packages/keyboard/src/mixin.js b/packages/keyboard/src/mixin.js
index d89b7ce67..5cc9b323a 100644
--- a/packages/keyboard/src/mixin.js
+++ b/packages/keyboard/src/mixin.js
@@ -1,7 +1,6 @@
import XEUtils from 'xe-utils'
import { DomTools } from '../../tools'
-
-const browse = DomTools.browse
+import { browse } from '../../tools/src/dom'
function getTargetOffset (target, container) {
let offsetTop = 0
diff --git a/packages/list/src/list.js b/packages/list/src/list.js
index dc1237f49..b0f9abcba 100644
--- a/packages/list/src/list.js
+++ b/packages/list/src/list.js
@@ -1,9 +1,8 @@
import XEUtils from 'xe-utils'
import GlobalConfig from '../../v-x-e-table/src/conf'
import vSize from '../../mixins/size'
-import { DomTools, GlobalEvent, createResizeEvent } from '../../tools'
-
-const { browse } = DomTools
+import { GlobalEvent, createResizeEvent } from '../../tools'
+import { browse } from '../../tools/src/dom'
export default {
name: 'VxeList',
diff --git a/packages/switch/src/switch.js b/packages/switch/src/switch.js
index 43f2c6856..0d08e8285 100644
--- a/packages/switch/src/switch.js
+++ b/packages/switch/src/switch.js
@@ -1,8 +1,7 @@
import { UtilTools, DomTools } from '../../tools'
import GlobalConfig from '../../v-x-e-table/src/conf'
import vSize from '../../mixins/size'
-
-const browse = DomTools.browse
+import { browse } from '../../tools/src/dom'
export default {
name: 'VxeSwitch',
diff --git a/packages/table/src/body.js b/packages/table/src/body.js
index 29ee230d5..819f47d1f 100644
--- a/packages/table/src/body.js
+++ b/packages/table/src/body.js
@@ -3,8 +3,9 @@ import GlobalConfig from '../../v-x-e-table/src/conf'
import VXETable from '../../v-x-e-table'
import { UtilTools, DomTools, isEnableConf } from '../../tools'
import { getOffsetSize, calcTreeLine, mergeBodyMethod } from './util'
+import { browse } from '../../tools/src/dom'
-const cellType = 'body'
+const renderType = 'body'
// 滚动、拖动过程中不需要触发
function isOperateMouse ($xetable) {
@@ -93,7 +94,7 @@ function renderColumn (h, _vm, $xetable, $seq, seq, rowid, fixedType, rowLevel,
const bindMouseenter = tableListeners['cell-mouseenter']
const bindMouseleave = tableListeners['cell-mouseleave']
const triggerDblclick = (editRender && editConfig && editOpts.trigger === 'dblclick')
- const params = { $table: $xetable, $seq, seq, rowid, row, rowIndex, $rowIndex, _rowIndex, column, columnIndex, $columnIndex, _columnIndex, fixed: fixedType, type: cellType, isHidden: fixedHiddenColumn, level: rowLevel, visibleData: afterFullData, data: tableData, items }
+ const params = { $table: $xetable, $seq, seq, rowid, row, rowIndex, $rowIndex, _rowIndex, column, columnIndex, $columnIndex, _columnIndex, fixed: fixedType, type: renderType, isHidden: fixedHiddenColumn, level: rowLevel, visibleData: afterFullData, data: tableData, items }
// 虚拟滚动不支持动态高度
if ((scrollXLoad || scrollYLoad) && !hasEllipsis) {
showEllipsis = hasEllipsis = true
@@ -302,7 +303,7 @@ function renderRows (h, _vm, $xetable, $seq, rowLevel, fixedType, tableData, tab
}
}
const rowid = UtilTools.getRowid($xetable, row)
- const params = { $table: $xetable, $seq, seq, rowid, fixed: fixedType, type: cellType, level: rowLevel, row, rowIndex, $rowIndex }
+ const params = { $table: $xetable, $seq, seq, rowid, fixed: fixedType, type: renderType, level: rowLevel, row, rowIndex, $rowIndex }
let isNewRow = false
if (editConfig) {
isNewRow = editStore.insertList.indexOf(row) > -1
@@ -336,7 +337,7 @@ function renderRows (h, _vm, $xetable, $seq, rowLevel, fixedType, tableData, tab
}
const { showOverflow } = expandColumn
const hasEllipsis = (XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow)) ? allColumnOverflow : showOverflow
- const expandParams = { $table: $xetable, $seq, seq, column: expandColumn, fixed: fixedType, type: cellType, level: rowLevel, row, rowIndex, $rowIndex }
+ const expandParams = { $table: $xetable, $seq, seq, column: expandColumn, fixed: fixedType, type: renderType, level: rowLevel, row, rowIndex, $rowIndex }
rows.push(
h('tr', {
class: 'vxe-body--expanded-row',
@@ -409,6 +410,14 @@ export default {
size: String,
fixedType: String
},
+ data () {
+ return {
+ wheelTime: null,
+ wheelYSize: 0,
+ wheelYInterval: 0,
+ wheelYTotal: 0
+ }
+ },
mounted () {
const { $parent: $xetable, $el, $refs, fixedType } = this
const { elemStore } = $xetable
@@ -424,12 +433,13 @@ export default {
this.$el._onscroll = this.scrollEvent
},
beforeDestroy () {
+ clearTimeout(this.wheelTime)
this.$el._onscroll = null
this.$el.onscroll = null
},
render (h) {
const { _e, $parent: $xetable, fixedColumn, fixedType } = this
- let { $scopedSlots, tId, tableData, tableColumn, showOverflow: allColumnOverflow, keyboardConfig, keyboardOpts, mergeList, spanMethod, scrollXLoad, scrollYLoad, isAllOverflow, emptyRender, emptyOpts, mouseConfig, mouseOpts } = $xetable
+ let { $scopedSlots, tId, tableData, tableColumn, showOverflow: allColumnOverflow, keyboardConfig, keyboardOpts, mergeList, spanMethod, scrollXLoad, scrollYLoad, isAllOverflow, emptyRender, emptyOpts, mouseConfig, mouseOpts, sYOpts } = $xetable
// 如果是使用优化模式
if (fixedType) {
if ((!mergeList.length && !spanMethod && !(keyboardConfig && keyboardOpts.isMerge)) && (scrollXLoad || scrollYLoad || (allColumnOverflow ? isAllOverflow : allColumnOverflow))) {
@@ -451,7 +461,10 @@ export default {
class: ['vxe-table--body-wrapper', fixedType ? `fixed-${fixedType}--wrapper` : 'body--wrapper'],
attrs: {
xid: tId
- }
+ },
+ on: scrollYLoad && sYOpts.mode === 'wheel' ? {
+ wheel: this.wheelEvent
+ } : {}
}, [
fixedType ? _e() : h('div', {
class: 'vxe-body--x-space',
@@ -504,7 +517,7 @@ export default {
class: 'vxe-table--cell-main-area-btn',
on: {
mousedown (evnt) {
- $xetable.triggerCellExtendMousedownEvent(evnt, { $table: $xetable, fixed: fixedType, type: cellType })
+ $xetable.triggerCellExtendMousedownEvent(evnt, { $table: $xetable, fixed: fixedType, type: renderType })
}
}
})
@@ -539,7 +552,7 @@ export default {
* 如果存在列固定右侧,同步更新滚动状态
*/
scrollEvent (evnt) {
- const { $el, $parent: $xetable, fixedType } = this
+ const { $el: scrollBodyElem, $parent: $xetable, fixedType } = this
const { $refs, highlightHoverRow, scrollXLoad, scrollYLoad, lastScrollTop, lastScrollLeft } = $xetable
const { tableHeader, tableBody, leftBody, rightBody, tableFooter, validTip } = $refs
const headerElem = tableHeader ? tableHeader.$el : null
@@ -547,10 +560,10 @@ export default {
const bodyElem = tableBody.$el
const leftElem = leftBody ? leftBody.$el : null
const rightElem = rightBody ? rightBody.$el : null
- let scrollTop = $el.scrollTop
+ let scrollTop = scrollBodyElem.scrollTop
const scrollLeft = bodyElem.scrollLeft
- const isX = scrollLeft !== lastScrollLeft
- const isY = scrollTop !== lastScrollTop
+ const isRollX = scrollLeft !== lastScrollLeft
+ const isRollY = scrollTop !== lastScrollTop
$xetable.lastScrollTop = scrollTop
$xetable.lastScrollLeft = scrollLeft
$xetable.lastScrollTime = Date.now()
@@ -564,7 +577,7 @@ export default {
scrollTop = rightElem.scrollTop
syncBodyScroll(scrollTop, bodyElem, leftElem)
} else {
- if (isX) {
+ if (isRollX) {
if (headerElem) {
headerElem.scrollLeft = bodyElem.scrollLeft
}
@@ -574,21 +587,104 @@ export default {
}
if (leftElem || rightElem) {
$xetable.checkScrolling()
- if (isY) {
+ if (isRollY) {
syncBodyScroll(scrollTop, leftElem, rightElem)
}
}
}
- if (scrollXLoad && isX) {
+ if (scrollXLoad && isRollX) {
$xetable.triggerScrollXEvent(evnt)
}
- if (scrollYLoad && isY) {
+ if (scrollYLoad && isRollY) {
$xetable.triggerScrollYEvent(evnt)
}
- if (isX && validTip && validTip.visible) {
+ if (isRollX && validTip && validTip.visible) {
validTip.updatePlacement()
}
- $xetable.emitEvent('scroll', { type: cellType, fixed: fixedType, scrollTop, scrollLeft, isX, isY }, evnt)
+ $xetable.emitEvent('scroll', { type: renderType, fixed: fixedType, scrollTop, scrollLeft, isX: isRollX, isY: isRollY }, evnt)
+ },
+ handleWheel (evnt, isTopWheel, deltaTop, isRollX, isRollY) {
+ const { $parent: $xetable } = this
+ const { $refs } = $xetable
+ const { tableBody, leftBody, rightBody } = $refs
+ const bodyElem = tableBody.$el
+ const leftElem = leftBody ? leftBody.$el : null
+ const rightElem = rightBody ? rightBody.$el : null
+ const remainSize = this.isPrevWheelTop === isTopWheel ? Math.max(0, this.wheelYSize - this.wheelYTotal) : 0
+ this.isPrevWheelTop = isTopWheel
+ this.wheelYSize = Math.abs(isTopWheel ? deltaTop - remainSize : deltaTop + remainSize)
+ this.wheelYInterval = 0
+ this.wheelYTotal = 0
+ clearTimeout(this.wheelTime)
+ const handleSmooth = () => {
+ let { fixedType, wheelYTotal, wheelYSize, wheelYInterval } = this
+ if (wheelYTotal < wheelYSize) {
+ wheelYInterval = Math.max(5, Math.floor(wheelYInterval * 1.5))
+ wheelYTotal = wheelYTotal + wheelYInterval
+ if (wheelYTotal > wheelYSize) {
+ wheelYInterval = wheelYInterval - (wheelYTotal - wheelYSize)
+ }
+ const { scrollTop, clientHeight, scrollHeight } = bodyElem
+ const targerTop = scrollTop + (wheelYInterval * (isTopWheel ? -1 : 1))
+ bodyElem.scrollTop = targerTop
+ if (leftElem) {
+ leftElem.scrollTop = targerTop
+ }
+ if (rightElem) {
+ rightElem.scrollTop = targerTop
+ }
+ if (isTopWheel ? targerTop < scrollHeight - clientHeight : targerTop >= 0) {
+ this.wheelTime = setTimeout(handleSmooth, 10)
+ }
+ this.wheelYTotal = wheelYTotal
+ this.wheelYInterval = wheelYInterval
+ $xetable.emitEvent('scroll', { type: renderType, fixed: fixedType, scrollTop: bodyElem.scrollTop, scrollLeft: bodyElem.scrollLeft, isX: isRollX, isY: isRollY }, evnt)
+ }
+ }
+ handleSmooth()
+ },
+ /**
+ * 滚轮处理
+ */
+ wheelEvent (evnt) {
+ const { deltaY, deltaX } = evnt
+ const { $el: scrollBodyElem, $parent: $xetable } = this
+ const { $refs, highlightHoverRow, scrollXLoad, scrollYLoad, lastScrollTop, lastScrollLeft } = $xetable
+ const { tableBody, validTip } = $refs
+ const bodyElem = tableBody.$el
+
+ const deltaTop = browse.firefox ? deltaY * 40 : deltaY
+ const deltaLeft = browse.firefox ? deltaX * 40 : deltaX
+ const isTopWheel = deltaTop < 0
+ // 如果滚动位置已经是顶部或底部,则不需要触发
+ if (isTopWheel ? scrollBodyElem.scrollTop <= 0 : scrollBodyElem.scrollTop >= scrollBodyElem.scrollHeight - scrollBodyElem.clientHeight) {
+ return
+ }
+
+ const scrollTop = scrollBodyElem.scrollTop + deltaTop
+ const scrollLeft = bodyElem.scrollLeft + deltaLeft
+ const isRollX = scrollLeft !== lastScrollLeft
+ const isRollY = scrollTop !== lastScrollTop
+
+ if (isRollY) {
+ evnt.preventDefault()
+ $xetable.lastScrollTop = scrollTop
+ $xetable.lastScrollLeft = scrollLeft
+ $xetable.lastScrollTime = Date.now()
+ if (highlightHoverRow) {
+ $xetable.clearHoverRow()
+ }
+ this.handleWheel(evnt, isTopWheel, deltaTop, isRollX, isRollY)
+ if (scrollXLoad && isRollX) {
+ $xetable.triggerScrollXEvent(evnt)
+ }
+ if (scrollYLoad && isRollY) {
+ $xetable.triggerScrollYEvent(evnt)
+ }
+ if (isRollX && validTip && validTip.visible) {
+ validTip.updatePlacement()
+ }
+ }
}
}
}
diff --git a/packages/table/src/methods.js b/packages/table/src/methods.js
index b66f17931..4c3cf48ce 100644
--- a/packages/table/src/methods.js
+++ b/packages/table/src/methods.js
@@ -4,14 +4,14 @@ import Cell from './cell'
import VXETable from '../../v-x-e-table'
import { UtilTools, DomTools, isEnableConf } from '../../tools'
import { clearTableAllStatus, handleFieldOrColumn } from './util'
-import { getPaddingTopBottomSize } from '../../tools/src/dom'
+import { browse, getPaddingTopBottomSize } from '../../tools/src/dom'
import { formats } from '../../v-x-e-table/src/formats'
const { getRowid, getRowkey, setCellValue, hasChildrenList, getColumnList } = UtilTools
-const { browse, calcHeight, hasClass, addClass, removeClass, getEventTargetNode } = DomTools
+const { calcHeight, hasClass, addClass, removeClass, getEventTargetNode } = DomTools
const isWebkit = browse['-webkit'] && !browse.edge
-const debounceScrollYDuration = browse.msie ? 40 : 20
+const debounceScrollYDuration = browse.msie ? 80 : 20
const resizableStorageKey = 'VXE_TABLE_CUSTOM_COLUMN_WIDTH'
const visibleStorageKey = 'VXE_TABLE_CUSTOM_COLUMN_VISIBLE'
@@ -3712,7 +3712,7 @@ const Methods = {
loadScrollYData (evnt) {
const { mergeList, scrollYStore } = this
const { startIndex, endIndex, visibleSize, offsetSize, rowHeight } = scrollYStore
- const scrollBodyElem = evnt.currentTarget
+ const scrollBodyElem = evnt.currentTarget || evnt.target
const scrollTop = scrollBodyElem.scrollTop
const toVisibleIndex = Math.floor(scrollTop / rowHeight)
const offsetItem = {
diff --git a/packages/tools/src/dom.js b/packages/tools/src/dom.js
index 1f2290e5e..f824c1356 100644
--- a/packages/tools/src/dom.js
+++ b/packages/tools/src/dom.js
@@ -3,7 +3,7 @@ import UtilTools from './utils'
const { getRowid } = UtilTools
-const browse = XEUtils.browse()
+export const browse = XEUtils.browse()
const reClsMap = {}
function getClsRE (cls) {
@@ -174,7 +174,7 @@ export const DomTools = {
const { scrollTop, scrollLeft, visibleHeight, visibleWidth } = getDomNode()
return { boundingTop, top: scrollTop + boundingTop, boundingLeft, left: scrollLeft + boundingLeft, visibleHeight, visibleWidth }
},
- toView (elem) {
+ scrollToView (elem) {
const scrollIntoViewIfNeeded = 'scrollIntoViewIfNeeded'
const scrollIntoView = 'scrollIntoView'
if (elem) {
diff --git a/packages/tools/src/event.js b/packages/tools/src/event.js
index 112e2fc2a..06b255ae1 100644
--- a/packages/tools/src/event.js
+++ b/packages/tools/src/event.js
@@ -1,8 +1,7 @@
import XEUtils from 'xe-utils'
-import DomTools from './dom'
+import { browse } from '../../tools/src/dom'
// 监听全局事件
-const browse = DomTools.browse
const wheelName = browse.firefox ? 'DOMMouseScroll' : 'mousewheel'
const eventStore = []
diff --git a/packages/validator/src/mixin.js b/packages/validator/src/mixin.js
index 633b4ba95..a5ddab24c 100644
--- a/packages/validator/src/mixin.js
+++ b/packages/validator/src/mixin.js
@@ -143,7 +143,7 @@ export default {
}
const posAndFinish = () => {
firstErrParams.cell = this.getCell(firstErrParams.row, firstErrParams.column)
- DomTools.toView(firstErrParams.cell)
+ DomTools.scrollToView(firstErrParams.cell)
this.handleValidError(firstErrParams).then(finish)
}
/**