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) } /**