fix: dragging element boundary error

pr675
Hufe921 2 years ago
parent fdb1fbdc26
commit a2d8dd55b3

@ -1,6 +1,6 @@
import { ElementStyleKey } from '../../dataset/enum/ElementStyle' import { ElementStyleKey } from '../../dataset/enum/ElementStyle'
import { IElement, IElementPosition } from '../../interface/Element' import { IElement, IElementPosition } from '../../interface/Element'
import { ICurrentPosition } from '../../interface/Position' import { ICurrentPosition, IPositionContext } from '../../interface/Position'
import { Draw } from '../draw/Draw' import { Draw } from '../draw/Draw'
import { Position } from '../position/Position' import { Position } from '../position/Position'
import { RangeManager } from '../range/RangeManager' import { RangeManager } from '../range/RangeManager'
@ -37,6 +37,7 @@ export class CanvasEvent {
public cacheRange: IRange | null public cacheRange: IRange | null
public cacheElementList: IElement[] | null public cacheElementList: IElement[] | null
public cachePositionList: IElementPosition[] | null public cachePositionList: IElementPosition[] | null
public cachePositionContext: IPositionContext | null
public mouseDownStartPosition: ICurrentPosition | null public mouseDownStartPosition: ICurrentPosition | null
private draw: Draw private draw: Draw
@ -60,6 +61,7 @@ export class CanvasEvent {
this.cacheRange = null this.cacheRange = null
this.cacheElementList = null this.cacheElementList = null
this.cachePositionList = null this.cachePositionList = null
this.cachePositionContext = null
this.mouseDownStartPosition = null this.mouseDownStartPosition = null
} }

@ -15,6 +15,7 @@ export function setRangeCache(host: CanvasEvent) {
host.cacheRange = deepClone(rangeManager.getRange()) host.cacheRange = deepClone(rangeManager.getRange())
host.cacheElementList = draw.getElementList() host.cacheElementList = draw.getElementList()
host.cachePositionList = position.getPositionList() host.cachePositionList = position.getPositionList()
host.cachePositionContext = position.getPositionContext()
} }
export function mousedown(evt: MouseEvent, host: CanvasEvent) { export function mousedown(evt: MouseEvent, host: CanvasEvent) {

@ -51,6 +51,7 @@ export function mouseup(evt: MouseEvent, host: CanvasEvent) {
if (draw.isReadonly()) return if (draw.isReadonly()) return
const position = draw.getPosition() const position = draw.getPosition()
const positionList = position.getPositionList() const positionList = position.getPositionList()
const positionContext = position.getPositionContext()
const rangeManager = draw.getRange() const rangeManager = draw.getRange()
const cacheRange = host.cacheRange! const cacheRange = host.cacheRange!
const cacheElementList = host.cacheElementList! const cacheElementList = host.cacheElementList!
@ -66,7 +67,8 @@ export function mouseup(evt: MouseEvent, host: CanvasEvent) {
// 是否需要拖拽-位置发生改变 // 是否需要拖拽-位置发生改变
if ( if (
range.startIndex >= cacheStartIndex && range.startIndex >= cacheStartIndex &&
range.endIndex <= cacheEndIndex range.endIndex <= cacheEndIndex &&
host.cachePositionContext?.tdId === positionContext.tdId
) { ) {
// 清除渲染副作用 // 清除渲染副作用
draw.clearSideEffect() draw.clearSideEffect()
@ -159,7 +161,9 @@ export function mouseup(evt: MouseEvent, host: CanvasEvent) {
} }
}) })
formatElementContext(elementList, replaceElementList, range.startIndex) formatElementContext(elementList, replaceElementList, range.startIndex)
// 缓存拖拽选区开始结束id // 缓存拖拽选区开始元素、位置、开始结束id
const cacheStartElement = cacheElementList[cacheStartIndex]
const cacheStartPosition = cachePositionList[cacheStartIndex]
const cacheRangeStartId = createDragId(cacheElementList[cacheStartIndex]) const cacheRangeStartId = createDragId(cacheElementList[cacheStartIndex])
const cacheRangeEndId = createDragId(cacheElementList[cacheEndIndex]) const cacheRangeEndId = createDragId(cacheElementList[cacheEndIndex])
// 设置拖拽值 // 设置拖拽值
@ -220,10 +224,7 @@ export function mouseup(evt: MouseEvent, host: CanvasEvent) {
} }
// 重设上下文 // 重设上下文
const startElement = elementList[range.startIndex] const startElement = elementList[range.startIndex]
const cacheStartElement = cacheElementList[cacheStartIndex]
const startPosition = positionList[range.startIndex] const startPosition = positionList[range.startIndex]
const cacheStartPosition = cachePositionList[cacheStartIndex]
const positionContext = position.getPositionContext()
let positionContextIndex = positionContext.index let positionContextIndex = positionContext.index
if (positionContextIndex) { if (positionContextIndex) {
if (startElement.tableId && !cacheStartElement.tableId) { if (startElement.tableId && !cacheStartElement.tableId) {

Loading…
Cancel
Save