编辑 - 这里有一个fiddle:http://jsfiddle.net/cLahpqoj/1/,这是我想要做的一个示例:https://www.seventh.tv/
也许我的设置门位置的数学计算有误导致出现问题。注意到鼠标位置和门位置在值上交换了。日志记录:
{doorX: -1066, x: 396, doorY: -1367, y: 164}
{doorX: 396, x: -1065, doorY: 164, y: -1367}
来源:
let mouseX = e.offsetX;
let mouseY = e.offsetY;
let doorX = currentDoorRect.x;
let doorY = currentDoorRect.y;
let x = doorX;
let y = doorY;
x = -( x + (mouseX) );
y = -( y + (mouseY) );
let transform = 'translate(' + x + 'px,' + y + 'px)';
currentDoor.style.transform = transform;
console.log( {
doorX,
x,
doorY,
y
});
我正在尝试使用 transform:translate(x,y)
css 属性根据当前 div 位置和鼠标位置移动一个 div。
我记录了传递给变换的 x 和 y 值,并注意到对于每个值更改,都会有一个前置值为 x: -1,y:0
的值更改,然后立即回到应该的值(即 x:-563,y:424
)
我正在使用 Vue.js,该函数是:
<template>
<div ref="test-container" id="test-container" class="h-full relative"
@mousedown.prevent="disableMiddleClickScroll"
@mousemove="moveDoors"
@wheel="disableWheelScroll">
<div
:ref="`door-${index}`"
v-for="index in numDoors" :key="index"
class="door bg-gray-300 p-8 text-center rounded flex-none">
Door
</div>
</div>
</template>
...
moveDoors(e) {
let mouseX = e.offsetX;
let mouseY = e.offsetY;
let currentDoor = this.$refs[`door-1`];
let currentDoorRect = currentDoor.getBoundingClientRect();
let doorX = currentDoorRect.x;
let doorY = currentDoorRect.y;
let x = -( doorX + (mouseX) );
let y = -( doorY + (mouseY) );
console.log( {
x,
y
});
let transform = 'translate(' + x + 'px,' + y + 'px)';
currentDoor.style.transform = transform;
},
这个事件被称为这样:
控制台日志示例:
{x: 1, y: -0}
{x: -547, y: -426}
{x: 1, y: -0}
{x: -545, y: -426}
{x: -0, y: 1}
{x: -544, y: -425}
{x: -0, y: 1}
{x: -546, y: -424}
{x: -1, y: -0}
容器的CSS样式是:
#test-container {
position: fixed;
left: 0%;
top: 0%;
right: 0%;
bottom: 0%;
}
如果没有足够的信息进行调试,请告知我。我认为这就是所有相关的信息。