Linuchs: offsetLeft, offsetTop eines fließenden Textabsatzes

Beitrag lesen

Hallo Martin,

Wie sieht es aus, wenn du das mit der span-Bastelei für die anderen beiden Segel auch machst?

Habe ich gemacht. Beim Durchlaufen der Elemente und deren parents darf ich den offsetTop NUR DANN berücksichtigen, wenn der tagName != "SPAN" ist.

Klappt beim Firefox 101.0.1, ist aber so unlogisch, dass das bei anderen Browsern vermutlich nicht funktioniert.

function linie( id1, id2, farbe) {

  let obj_1 = document.getElementById(id1);
  let x1    = 0;
  let y1    = 0;
  while ( obj_1.style.position != "relative" && obj_1.tagName != "BODY" ) {
    x1  +=  obj_1.offsetLeft;     // x-Pixel addieren
    if( obj_1.tagName != "SPAN" ) {
      y1  +=  obj_1.offsetTop;      // y-Pixel addieren
    }
    console.log( "x1=[" +x1 +"] y1=[" +y1 +"]" );
    obj_1 = obj_1.parentElement;
  }

  let obj_2 = document.getElementById(id2);
  let x2    = 0;
  let y2    = 0;
  while ( obj_2.style.position != "relative" && obj_2.tagName != "BODY" ) {
    x2  +=  obj_2.offsetLeft;     // x-Pixel addieren
    if( obj_2.tagName != "SPAN" ) {
      y2  +=  obj_2.offsetTop;      // y-Pixel addieren
    }
    console.log( "x2=[" +x2 +"] y2=[" +y2 +"] tagName=[" +obj_2.tagName +"]" );
    obj_2 = obj_2.parentElement;
  }

  x2 -= 5;  // kleiner Abstand zw. line und Text
  let h2  = document.getElementById(id2).offsetHeight;  // height der Zielmarke
  y2 += h2/2;
  let line_command  = "<line x1='" +x1 +"px', y1='" +y1 +"px', x2='" +x2 +"px', y2='" +y2 +"px' style='stroke:#f00; stroke-width:2px; z-index:99' />";
//console.log( line_command );
  document.write( line_command );
}


var line_command  = "<svg style='position:absolute; left:0; width:100%; top:0; height:100%;'>";
//console.log( line_command );
document.write( line_command );

linie("gross",      "gross_x",      "#f00");
linie("besan",      "besan_x",      "#f00");
linie("fock",       "fock_x",       "#f00");

var line_command  = "</svg>";
document.write( line_command );