Я пытаюсь переместить div от мыши на перетаскивании в типовой реагировании. Это решение не работает?Html

Программисты Html
Ответить
Anonymous
 Я пытаюсь переместить div от мыши на перетаскивании в типовой реагировании. Это решение не работает?

Сообщение Anonymous »

Это код. Но окно уходит от мыши после первого щелчка. Есть ли способ использовать 3 использования? < /P>
import { BsCircle } from "react-icons/bs";
import { useState, useEffect, useRef, useCallback } from "react";

type Coordinates = {
x: number;
y: number;
};

const Index = () => {
const [Mouse, setMouse] = useState(undefined);
const [newPosition, setNewPosition] = useState(
undefined
);
const [isMoving, setIsMoving] = useState(false);
const [hasMoved, sethasMoved] = useState(false);
const windowRef = useRef(null);
const stylewindowContainer = hasMoved
? {
top: newPosition?.y,
left: newPosition?.x,
position: "fixed" as "fixed",
width: '37.5%',
transform: 'none'
}
: { color: "black" };

const startMoving = useCallback((e: MouseEvent) => {
const Target = e.target as HTMLDivElement;
setIsMoving(true);
sethasMoved(true);
setMouse({
x: e.clientX - Target.getBoundingClientRect().left,
y: e.clientY - Target.getBoundingClientRect().top,
});
if (Mouse) {
setNewPosition({x: e.clientX - Mouse?.x, y: e.clientY - Mouse?.y})
}}, [])

useEffect(() => {
if (!windowRef.current) {
return;
}

const window: HTMLDivElement = windowRef.current;
window.addEventListener("mousedown", startMoving);
return () => {
window.removeEventListener("mousedown", startMoving);
};
}, [startMoving]);

const Moving = useCallback((e: MouseEvent) => {
if (Mouse) {
if (isMoving) {

setNewPosition({x: e.clientX - Mouse?.x, y: e.clientY - Mouse?.y})
}}}, [Mouse, isMoving]);

useEffect(() => {
if (!windowRef.current) {
return;
}
const window: HTMLDivElement = windowRef.current;
window.addEventListener("mousemove", Moving);
return () => {
window.removeEventListener("mousemove", Moving);
};
},[Moving]);

const stopMoving = useCallback(() => {
setIsMoving(false)
},[])

useEffect(() => {
if (!windowRef.current) {
return;
}
const window: HTMLDivElement = windowRef.current;
window.addEventListener("mouseup", stopMoving);
return () => {
window.removeEventListener("mouseup", stopMoving);
};
},[stopMoving]);

return (











something
,

Hello World!
Hello World!
Hello World!
Hello World!
Hello World!
















Hello World!

{newPosition?.x} : {newPosition?.y}






Hello World!


);
};

export default Index;
< /code>
Моя начальная логика состояла в том, чтобы получить положение Mousedown в окне, чтобы получить относительную позицию точки, где мы можем удерживать окно. Храните эти координаты в мышью, а затем обновите положение коробки в отношении координат событий MouseMove, вычитающих координат мыши. Кажется, это не работает.

Подробнее здесь: https://stackoverflow.com/questions/714 ... olution-is
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»