Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

277
Vistas
Cómo enlazar el div arrastrable dentro del contenedor

Estoy usando reaccionar con mecanografiado e implementé el ejemplo w3school drag div en mi aplicación de reacción. Ahora, estoy tratando de vincular este div arrastrable dentro del límite. Actualmente, mi caja se está moviendo fuera del contenedor. por favor ayuda cómo lograr esto sin usar ninguna biblioteca de terceros.

Aquí está mi demostración de sandbox

mi código:

 import "./styles.css"; import React, { useRef } from "react"; export default function App() { const dragRef = useRef<HTMLDivElement>(null); let pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0; const drag = (event: any) => { const boundingBox = dragRef.current; if (boundingBox) { event = event || window.event; event.preventDefault(); pos1 = pos3 - event.clientX; pos2 = pos4 - event.clientY; pos3 = event.clientX; pos4 = event.clientY; boundingBox.style.top = boundingBox.offsetTop - pos2 + "px"; boundingBox.style.left = boundingBox.offsetLeft - pos1 + "px"; } }; const stop = () => { const boundingBox = dragRef.current; if (boundingBox) { boundingBox.onmouseup = null; boundingBox.onmousemove = null; } }; const start = (event: any) => { const box = dragRef.current; if (box) { event = event || window.event; event.preventDefault(); pos3 = event.clientX; pos4 = event.clientY; box.onmouseup = stop; box.onmousemove = drag; } }; return ( <div className="App"> <div ref={dragRef} className="draggableDiv" onMouseDown={start} onMouseMove={drag} onMouseUp={stop} ></div> </div> ); }

y el archivo CSS externo:

 .App { font-family: sans-serif; height: 350px; width: 400px; background-color: rgb(132, 190, 241); position: relative; } .draggableDiv { position: absolute; height: 40px; width: 40px; background-color: red; cursor: grab; }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede mantener otra ref en el área arrastrable y verificar si el clientX y el clientY están dentro de ese rango.

  1. Cree otra referencia y adjunte a div de área arrastrable.
 const dragAreaRef = useRef<HTMLDivElement>(null); ... ... return ( <div className="App" ref={dragAreaRef}> ... </div> );
  1. Actualice la función de drag como se muestra a continuación.
 const drag = (event: any) => { const boundingBox = dragRef.current; const { left, right, top, bottom } = dragAreaRef.current?.getBoundingClientRect(); if (boundingBox) { event = event || window.event; if ( event.clientX > left && event.clientX < right && event.clientY > top && event.clientY < bottom ) { event.preventDefault(); pos1 = pos3 - event.clientX; pos2 = pos4 - event.clientY; pos3 = event.clientX; pos4 = event.clientY; boundingBox.style.top = boundingBox.offsetTop - pos2 + "px"; boundingBox.style.left = boundingBox.offsetLeft - pos1 + "px"; } } };

Editar React Typescript (bifurcado)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda