我创建了一个纤细的组件来允许可拖动的 Dom 元素:
<script>
export let posX = 0
export let posY = 0
let moving = false
let offsetX
let offsetY
function dragStart(e) {
const rect = e.currentTarget.getBoundingClientRect()
offsetX = e.pageX - rect.left
offsetY = e.pageY - rect.top
moving = true
}
function dragStop() {
moving = false
}
function dragMove(e) {
if (moving) {
posX = e.pageX - offsetX
posY = e.pageY - offsetY
}
}
</script>
<style>
.draggable {
user-select: none;
position: absolute;
cursor: grab;
}
.draggable:active {
cursor: grabbing;
}
</style>
<svelte:window on:mouseup={dragStop} on:mousemove={dragMove} />
<div
on:mousedown={dragStart}
style="top: {posY}px; left: {posX}px;"
class="draggable"
>
<slot/>
</div>
当我将 CSS 属性添加transform: scale(0.5);到包含可拖动组件的 div 时,可拖动组件会按预期停止工作。它们的位置从鼠标位置偏移。
<script>
import Draggable from "./Draggable.svelte"
</script>
<style>
.box {
background: red;
width: 150px;
height: 150px;
}
.container {
transform: scale(0.5);
}
</style>
<div class="container">
<Draggable>
<div class="box"/>
</Draggable>
<Draggable posY={250}>
<div class="box"/>
</Draggable>
</div>
这是一个纤细的 REPL 的链接:https ://svelte.dev/repl/679692b94afc48b48a2a3ebd39875ea0?version=3.42.5
我将如何解决这个问题?
提前致谢!