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

152
Vistas
Why getBoundingClientRect returns null when pointing to a negative coordinate position in svg?

The trick part might be the viewBox="-50 0 150 100". But I really need to get the negative coordinates.

Please take a look at the demo below:

$('svg').click(function(e){
  const { farthestViewportElement: svgRoot } = e.target;
  const dim = svgRoot.getBoundingClientRect();
  const x = e.clientX - dim.left;
  const y = e.clientY - dim.top;
  $('#cord-track').val(`x: ${x}, y: ${y}`);
})
svg {border:1px dashed blue}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p>When you click mouse in the red rect, it works perfectly</p>
<p>When you click mouse in the left blank zone, it throws an error, so that I can't trace my x and y values. How do I fix it?</p>
<svg width="100px" id="test" viewBox="-50 0 150 100">
<rect x="0" y="0" width="100" height="100" fill="red">
</svg>
<input id="cord-track" />

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

0

https://www.google.com/search?q=FarthestViewportElement

The documentation for FarthestViewportElement says:

The farthest ancestor ‘svg’ element.
Null if the current element is the outermost svg element

Thus when you click the <svg> itself, you get a null value

So instead, get that <svg> with e.target.closest("svg")

Note: this will ofcourse fail when you have <svg> inside <svg>;
use a full size <rect> as first element then for a catch all

MYSVG.onclick = e => {
  let svg = e.target.closest("svg");
  let path = e.composedPath().map(el => el.nodeName ).join(",");
  console.log("CLICKED:",e.target.nodeName,"IN:",svg.id,"CLICK PATH:",path);
}
svg {
  width:180px;
  border: 1px dashed blue
}
<svg id="MYSVG" viewBox="-50 0 150 100">
    <rect x="0" y="0" width="100" height="100" fill="red"/>
</svg>

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