Add File
This commit is contained in:
72
frontend/src/views/dashboard/canvas/ResizeHandle.vue
Normal file
72
frontend/src/views/dashboard/canvas/ResizeHandle.vue
Normal file
@@ -0,0 +1,72 @@
|
||||
<script setup lang="ts">
|
||||
defineProps({
|
||||
startResize: {
|
||||
type: Function,
|
||||
default: () => {
|
||||
return {}
|
||||
},
|
||||
},
|
||||
})
|
||||
const cursors = {
|
||||
lt: 'nw',
|
||||
t: 'n',
|
||||
rt: 'ne',
|
||||
r: 'e',
|
||||
rb: 'se',
|
||||
b: 's',
|
||||
lb: 'sw',
|
||||
l: 'w',
|
||||
}
|
||||
|
||||
function getPointStyle(point: string) {
|
||||
const hasT = /t/.test(point)
|
||||
const hasB = /b/.test(point)
|
||||
const hasL = /l/.test(point)
|
||||
const hasR = /r/.test(point)
|
||||
let newLeft = '0px'
|
||||
let newTop = '0px'
|
||||
|
||||
// Points at the four corners
|
||||
if (point.length === 2) {
|
||||
newLeft = hasL ? '3px' : 'calc(100% - 3px)'
|
||||
newTop = hasT ? '3px' : 'calc(100% - 3px)'
|
||||
} else {
|
||||
// The point between the upper and lower points, with a width centered
|
||||
if (hasT || hasB) {
|
||||
newLeft = '50%'
|
||||
newTop = hasT ? '0px' : '100%'
|
||||
}
|
||||
|
||||
// The points on both sides are centered in height
|
||||
if (hasL || hasR) {
|
||||
newLeft = hasL ? '0px' : '100%'
|
||||
newTop = '50%'
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
marginLeft: '-4px',
|
||||
marginTop: '-4px',
|
||||
left: `${newLeft}`,
|
||||
top: `${newTop}`,
|
||||
// @ts-expect-error eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
||||
cursor: `${cursors[point]}-resize`,
|
||||
}
|
||||
}
|
||||
|
||||
const pointList = ['lt', 't', 'rt', 'r', 'rb', 'b', 'lb', 'l']
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div
|
||||
v-for="point in pointList"
|
||||
:key="point"
|
||||
class="resizeHandle"
|
||||
:style="getPointStyle(point)"
|
||||
@mousedown="startResize($event, point)"
|
||||
></div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="less">
|
||||
@import '../css/CanvasStyle.less';
|
||||
</style>
|
||||
Reference in New Issue
Block a user