Это код. Но окно уходит от мыши после первого щелчка. Есть ли способ использовать 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
Я пытаюсь переместить div от мыши на перетаскивании в типовой реагировании. Это решение не работает? ⇐ Html
Программисты Html
1753089575
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, вычитающих координат мыши. Кажется, это не работает.
Подробнее здесь: [url]https://stackoverflow.com/questions/71446647/i-am-trying-to-move-a-div-by-mouse-on-drag-in-typescript-react-this-solution-is[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия