提交 394fb46b authored 作者: wangjiahao's avatar wangjiahao

feat: 优化拖拽效果 防止多次请求后台数据

上级 f155f3d7
...@@ -298,6 +298,10 @@ export default { ...@@ -298,6 +298,10 @@ export default {
horizontal: { horizontal: {
type: Boolean, type: Boolean,
default: true default: true
},
changeStyle: {
require: true,
type: Object
} }
}, },
data: function() { data: function() {
...@@ -542,69 +546,21 @@ export default { ...@@ -542,69 +546,21 @@ export default {
this.bounds = this.calcResizeLimits() this.bounds = this.calcResizeLimits()
} }
this.changeHeight(val) this.changeHeight(val)
},
changeStyle(val) {
this.beforeDestroyFunction()
this.createdFunction()
this.mountedFunction()
} }
}, },
created: function() { created: function() {
// eslint-disable-next-line 无效的prop:minWidth不能大于maxWidth this.createdFunction()
if (this.maxWidth && this.minWidth > this.maxWidth) console.warn('[Vdr warn]: Invalid prop: minWidth cannot be greater than maxWidth')
// eslint-disable-next-line 无效prop:minHeight不能大于maxHeight'
if (this.maxWidth && this.minHeight > this.maxHeight) console.warn('[Vdr warn]: Invalid prop: minHeight cannot be greater than maxHeight')
this.elmX = 0
this.elmY = 0
this.elmW = 0
this.elmH = 0
this.lastCenterX = 0
this.lastCenterY = 0
this.fixedXName = ''
this.fixedYName = ''
this.fixedX = 0
this.fixedY = 0
this.TL = {}
this.TR = {}
this.BL = {}
this.BR = {}
this.resetBoundsAndMouseState()
}, },
mounted: function() { mounted: function() {
// private 冲突检测 和水平设计值保持一致 this.mountedFunction()
// this.isConflictCheck = this.horizontal
// this.snap = this.horizontal
// this.snapTolerance = 5
// this.grid = [10, 10]
if (!this.enableNativeDrag) {
this.$el.ondragstart = () => false
}
const [parentWidth, parentHeight] = this.getParentSize()
this.parentWidth = parentWidth
this.parentHeight = parentHeight
const [width, height] = getComputedSize(this.$el)
this.aspectFactor = (this.w !== 'auto' ? this.w : width) / (this.h !== 'auto' ? this.h : height)
if (this.outsideAspectRatio) {
this.aspectFactor = this.outsideAspectRatio
}
this.width = this.w !== 'auto' ? this.w : width
// console.log('width1:' + this.width)
this.height = this.h !== 'auto' ? this.h : height
this.right = this.parentWidth - this.width - this.left
this.bottom = this.parentHeight - this.height - this.top
// 绑定data-*属性
this.settingAttribute()
// 监听取消操作
addEvent(document.documentElement, 'mousedown', this.deselect)
addEvent(document.documentElement, 'touchend touchcancel', this.deselect)
// 窗口变化时,检查容器大小
addEvent(window, 'resize', this.checkParentSize)
}, },
beforeDestroy: function() { beforeDestroy: function() {
removeEvent(document.documentElement, 'mousedown', this.deselect) this.beforeDestroyFunction()
removeEvent(document.documentElement, 'touchstart', this.handleUp)
removeEvent(document.documentElement, 'mousemove', this.move)
removeEvent(document.documentElement, 'touchmove', this.move)
removeEvent(document.documentElement, 'mouseup', this.handleUp)
removeEvent(document.documentElement, 'touchend touchcancel', this.deselect)
removeEvent(window, 'resize', this.checkParentSize)
}, },
methods: { methods: {
// 重置边界和鼠标状态 // 重置边界和鼠标状态
...@@ -1506,6 +1462,68 @@ export default { ...@@ -1506,6 +1462,68 @@ export default {
style.rotate = this.rotate style.rotate = this.rotate
this.hasMove = true this.hasMove = true
this.$store.commit('setShapeStyle', style) this.$store.commit('setShapeStyle', style)
},
mountedFunction() {
// private 冲突检测 和水平设计值保持一致
// this.isConflictCheck = this.horizontal
// this.snap = this.horizontal
// this.snapTolerance = 5
// this.grid = [10, 10]
if (!this.enableNativeDrag) {
this.$el.ondragstart = () => false
}
const [parentWidth, parentHeight] = this.getParentSize()
this.parentWidth = parentWidth
this.parentHeight = parentHeight
const [width, height] = getComputedSize(this.$el)
this.aspectFactor = (this.w !== 'auto' ? this.w : width) / (this.h !== 'auto' ? this.h : height)
if (this.outsideAspectRatio) {
this.aspectFactor = this.outsideAspectRatio
}
this.width = this.w !== 'auto' ? this.w : width
// console.log('width1:' + this.width)
this.height = this.h !== 'auto' ? this.h : height
this.right = this.parentWidth - this.width - this.left
this.bottom = this.parentHeight - this.height - this.top
// 绑定data-*属性
this.settingAttribute()
// 监听取消操作
addEvent(document.documentElement, 'mousedown', this.deselect)
addEvent(document.documentElement, 'touchend touchcancel', this.deselect)
// 窗口变化时,检查容器大小
addEvent(window, 'resize', this.checkParentSize)
},
createdFunction() {
// eslint-disable-next-line 无效的prop:minWidth不能大于maxWidth
if (this.maxWidth && this.minWidth > this.maxWidth) console.warn('[Vdr warn]: Invalid prop: minWidth cannot be greater than maxWidth')
// eslint-disable-next-line 无效prop:minHeight不能大于maxHeight'
if (this.maxWidth && this.minHeight > this.maxHeight) console.warn('[Vdr warn]: Invalid prop: minHeight cannot be greater than maxHeight')
this.elmX = 0
this.elmY = 0
this.elmW = 0
this.elmH = 0
this.lastCenterX = 0
this.lastCenterY = 0
this.fixedXName = ''
this.fixedYName = ''
this.fixedX = 0
this.fixedY = 0
this.TL = {}
this.TR = {}
this.BL = {}
this.BR = {}
this.resetBoundsAndMouseState()
},
beforeDestroyFunction() {
removeEvent(document.documentElement, 'mousedown', this.deselect)
removeEvent(document.documentElement, 'touchstart', this.handleUp)
removeEvent(document.documentElement, 'mousemove', this.move)
removeEvent(document.documentElement, 'touchmove', this.move)
removeEvent(document.documentElement, 'mouseup', this.handleUp)
removeEvent(document.documentElement, 'touchend touchcancel', this.deselect)
removeEvent(window, 'resize', this.checkParentSize)
} }
} }
......
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
:class="{'gap_class':canvasStyleData.panel.gap==='yes'}" :class="{'gap_class':canvasStyleData.panel.gap==='yes'}"
:snap="true" :snap="true"
:snap-tolerance="1" :snap-tolerance="1"
:change-style="customStyleHistory" :change-style="customStyle"
@refLineParams="getRefLineParams" @refLineParams="getRefLineParams"
> >
<component <component
...@@ -193,6 +193,16 @@ export default { ...@@ -193,6 +193,16 @@ export default {
]) ])
}, },
watch: { watch: {
customStyle: {
handler(newVal, oldVla) {
// 获取当前宽高(宽高改变后重新渲染画布)
// if (oldVla && newVal !== oldVla) {
// this.showDrag = false
// this.$nextTick(() => (this.showDrag = true))
// }
},
deep: true
},
outStyle: { outStyle: {
handler(newVal, oldVla) { handler(newVal, oldVla) {
this.changeScale() this.changeScale()
...@@ -454,17 +464,6 @@ export default { ...@@ -454,17 +464,6 @@ export default {
} }
}, },
changeScale() { changeScale() {
// 获取当前宽高(宽高改变后重新渲染画布)
const style = {
width: this.format(this.canvasStyleData.width, this.scaleWidth) + 'px',
height: this.format(this.canvasStyleData.height, this.scaleHeight) + 'px'
}
if (this.customStyleHistory && this.customStyleHistory !== style) {
this.showDrag = false
this.$nextTick(() => (this.showDrag = true))
}
this.customStyleHistory = style
if (this.canvasStyleData.matrixCount) { if (this.canvasStyleData.matrixCount) {
this.matrixCount = this.canvasStyleData.matrixCount this.matrixCount = this.canvasStyleData.matrixCount
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论