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

172
Vistas
¿Cómo se agrega una anotación a un sitio web sin alterar el diseño?

Estoy trabajando en un proyecto de hobby similar a markup.io donde puedes cargar cualquier sitio web y anotarlo. No sé cómo agregar una anotación que se comporte como lo hace en markup.io:

  • No interrumpe el estilo o el diseño del sitio web que está anotando.
  • La anotación mantiene la posición correcta al desplazarse y cambiar el tamaño de la ventana

Por lo que puedo ver, colocan un div de posición absoluta dentro del elemento en el que hizo clic. Según tengo entendido, al leer los documentos , div se posicionaría en función del antepasado posicionado más cercano. ¿Cómo calcularía los valores superior e izquierdo correctos para colocar la anotación donde el usuario hizo clic? ¿Hay una mejor manera de hacer esto?

Estoy usando React si eso importa.

Cosas que he probado:

  1. Agregue el siguiente bit de html al elemento en el que se hizo clic:
 <div style="width:0px; height:0px; position:relative;"> <div style="width:50px;height:50px;position:absolute; ">this is the annotation </div> </div>

Problema: esto afectaría el diseño de la página debido a que el flujo del documento no ignora el div de posición relativa.

  1. Cree una superposición fija en toda la página. Obtenga el selector css del elemento en el que se hizo clic. Dibuje una anotación en la superposición fija en la posición x,y del elemento.

Problema: cada vez que el usuario se desplaza o cambia el tamaño de la ventana, la anotación debe volver a dibujarse en la nueva posición del elemento. Utilicé getBoundintClientRect para obtener la nueva posición y esto provocaría un reflujo y provocaría que todo el sitio web tuviera graves problemas de rendimiento al tratar con más de 100 anotaciones.

¡Ojalá alguien me pueda señalar en la dirección correcta!

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La idea general es la siguiente:

  1. Encuentre el padre del elemento en el que hizo clic
  2. Compruebe si están posicionados (algo que no sea estático)
  3. Si es estático busca el elemento más cercano que se encuentra posicionado.
  4. Establezca la posición superior e izquierda de la nueva insignia/anotación en la posición del mouse menos la parte superior e izquierda del elemento al que lo va a agregar (en este caso, llamado padre).
  5. También tenga en cuenta el ancho y la altura restando la mitad de cada uno para centrar perfectamente su anotación.
 // In my case I put the webpage in an Iframe. If this is your own page // you can just use document. iframe.contentWindow.document.addEventListener( 'click', (e: MouseEvent) => { // step 1: find the parent. let parent = e.target.parentElement; let computedStyle = window.getComputedStyle(parent); // step 2 & 3: Look up the first positioned element and make this the // the element that you're going to append your badge/annotation to. while ( computedStyle.position === 'static' && parent.parentElement !== null ) { parent = parent.parentElement; computedStyle = window.getComputedStyle(parent); } // style the annotation the way you want to const badge = document.createElement('div'); const { top, left } = parent.getBoundingClientRect(); badge.style.position = 'absolute'; // step 4 and 5 get the mouse position through e.clientX and Y and // subtract the appropriate value like below to place it exactly at the mouse position badge.style.top = `${e.clientY - top - 5}px`; badge.style.left = `${e.clientX - left - 5}px`; badge.style.backgroundColor = 'red'; badge.style.width = '10px'; badge.style.height = '10px'; badge.style.borderRadius = '50%'; badge.style.zIndex = '9999'; parent.appendChild(badge); } );
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