perf: 旋转后元素缩放控制点鼠标指针优化

This commit is contained in:
pipipi-pikachu 2021-06-27 18:40:55 +08:00
parent b8f7e707c9
commit 6358aa9b3c
4 changed files with 62 additions and 20 deletions

View File

@ -13,6 +13,7 @@
v-for="point in resizeHandlers" v-for="point in resizeHandlers"
:key="point.direction" :key="point.direction"
:type="point.direction" :type="point.direction"
:rotate="elementInfo.rotate"
:style="point.style" :style="point.style"
@mousedown.stop="$event => scaleElement($event, elementInfo, point.direction)" @mousedown.stop="$event => scaleElement($event, elementInfo, point.direction)"
/> />

View File

@ -1,20 +1,43 @@
<template> <template>
<div :class="['resize-handler', type]"></div> <div :class="['resize-handler', rotateClassName, type]"></div>
</template> </template>
<script lang="ts"> <script lang="ts">
import { PropType } from 'vue' import { computed, defineComponent, PropType } from 'vue'
import { OperateResizeHandler } from '@/types/edit' import { OperateResizeHandler } from '@/types/edit'
export default { export default defineComponent({
name: 'resize-handler', name: 'resize-handler',
props: { props: {
type: { type: {
type: String as PropType<OperateResizeHandler>, type: String as PropType<OperateResizeHandler>,
default: '', default: '',
}, },
rotate: {
type: Number,
default: 0,
},
}, },
} setup(props) {
const rotateClassName = computed(() => {
const prefix = 'rotate-'
const rotate = props.rotate
if (rotate > -22.5 && rotate <= 22.5) return prefix + 0
else if (rotate > 22.5 && rotate <= 67.5) return prefix + 45
else if (rotate > 67.5 && rotate <= 112.5) return prefix + 90
else if (rotate > 112.5 && rotate <= 157.5) return prefix + 135
else if (rotate > 157.5 || rotate <= -157.5) return prefix + 0
else if (rotate > -157.5 && rotate <= -112.5) return prefix + 45
else if (rotate > -112.5 && rotate <= -67.5) return prefix + 90
else if (rotate > -67.5 && rotate <= -22.5) return prefix + 135
return prefix + 0
})
return {
rotateClassName,
}
},
})
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -29,29 +52,45 @@ export default {
background-color: #fff; background-color: #fff;
border-radius: 1px; border-radius: 1px;
&.left-top { &.left-top.rotate-0,
&.right-bottom.rotate-0,
&.left.rotate-45,
&.right.rotate-45,
&.left-bottom.rotate-90,
&.right-top.rotate-90,
&.top.rotate-135,
&.bottom.rotate-135 {
cursor: nwse-resize; cursor: nwse-resize;
} }
&.top { &.top.rotate-0,
&.bottom.rotate-0,
&.left-top.rotate-45,
&.right-bottom.rotate-45,
&.left.rotate-90,
&.right.rotate-90,
&.left-bottom.rotate-135,
&.right-top.rotate-135 {
cursor: ns-resize; cursor: ns-resize;
} }
&.right-top { &.left-bottom.rotate-0,
&.right-top.rotate-0,
&.top.rotate-45,
&.bottom.rotate-45,
&.left-top.rotate-90,
&.right-bottom.rotate-90,
&.left.rotate-135,
&.right.rotate-135 {
cursor: nesw-resize; cursor: nesw-resize;
} }
&.left { &.left.rotate-0,
&.right.rotate-0,
&.left-bottom.rotate-45,
&.right-top.rotate-45,
&.top.rotate-90,
&.bottom.rotate-90,
&.left-top.rotate-135,
&.right-bottom.rotate-135 {
cursor: ew-resize; cursor: ew-resize;
} }
&.right {
cursor: ew-resize;
}
&.left-bottom {
cursor: nesw-resize;
}
&.bottom {
cursor: ns-resize;
}
&.right-bottom {
cursor: nwse-resize;
}
} }
</style> </style>

View File

@ -13,6 +13,7 @@
v-for="point in resizeHandlers" v-for="point in resizeHandlers"
:key="point.direction" :key="point.direction"
:type="point.direction" :type="point.direction"
:rotate="elementInfo.rotate"
:style="point.style" :style="point.style"
@mousedown.stop="$event => scaleElement($event, elementInfo, point.direction)" @mousedown.stop="$event => scaleElement($event, elementInfo, point.direction)"
/> />

View File

@ -13,6 +13,7 @@
v-for="point in textElementResizeHandlers" v-for="point in textElementResizeHandlers"
:key="point.direction" :key="point.direction"
:type="point.direction" :type="point.direction"
:rotate="elementInfo.rotate"
:style="point.style" :style="point.style"
@mousedown.stop="$event => scaleElement($event, elementInfo, point.direction)" @mousedown.stop="$event => scaleElement($event, elementInfo, point.direction)"
/> />