Cybaer: Elementposition herausfinden.

Beitrag lesen

Hi,

kann man mittels JS die Position (x und y-koordinaten) eines
HTML-Elements (z.B. eines Links) herausfinden,

Ja.

  
function getX(obj,relative) { var x=0; if(typeof(obj)=="object" && document.getElementById) { x=obj.offsetLeft; if(obj.offsetParent && !relative) { x+=getX(obj.offsetParent); } return x; } else  { return false; } }  
function getY(obj,relative) { var y=0; if(typeof(obj)=="object" && document.getElementById) { y=obj.offsetTop; if(obj.offsetParent && !relative) { y+=getY(obj.offsetParent); } return y; } else  { return false; } }  

Ermittelt absolutes X & Y des Objekts obj (wenn relativ erwünscht ist, muß der zweite Parameter true sein). Browser vor JS 1.5 liefern ein false zurück.

Bei

<span>A <span id="example">B</span></span>

wäre die Position von "A" (erstes SPAN im Quelltext):

alert("X/Y: "+getX(getObject("span",0))+"/"+getY(getObject("span",0)));

die Position von "B" (ID ist "example"):

alert("X/Y: "+getX(getObject("example"))+"/"+getY(getObject("example")));

wobei getObject() so aussieht:

  
function getObject(element,number) {  
 var obj=false;  
 if(element) {  
  if(typeof(element)=="object") { obj=element; }  
  else if(document.getElementById) {  
   number=(number)?number:0;  
   if (document.getElementById(element)) { obj=document.getElementById(element); }  
   else if (document.getElementsByName(element) && document.getElementsByName(element)[number]) { obj=document.getElementsByName(element)[number]; }  
   else if (document.getElementsByTagName && document.getElementsByTagName(element) && document.getElementsByTagName(element)[number]) { obj=document.getElementsByTagName(element)[number]; }  
  }  
 }  
 return obj;  
}  

um z.B.
nachträglich ein weiteres Element in der nähe zu platzieren?

16 "Schatten-Bs" mit fließendem Helligkeitsübergang:

  
 obj=getObject("example"); char="B";  
 if(getX(obj)!==false) {  
  for(i=1;i<=16;i++) {  
   c=i*16;  
   document.write('<span id="example'+i+'" style="color:rgb('+c+','+c+','+c+');">'+char+'<\/span>');  
   posElement("example"+i,i,i/2,-(i+1),obj)  
  }  
 }  

wobei posElement() so aussieht:

  
// Positioniere HTML-Element element absolut im Dokument  
// ausgehend vom Nullpunkt (links oben) oder vom Element base  
// posElement(Object/ID/NAME/TagName,X,Y[,Z][,Object/ID/NAME/TagName]  
function posElement(element,x,y,z,base) {  
 var obj, baseX=0, baseY=0, result=false;  
  
 if(element && document.getElementById) {  
  x=(typeof(x)=="number")?x:0;  
  y=(typeof(y)=="number")?y:0;  
  if(typeof(z)!="number" && !base) { base=z; }  
  
  if(base) {  
   obj=getObject(base);  
   if(obj) {  
    baseX=getX(obj);  
    baseY=getY(obj);  
   }  
  }  
  
  obj=getObject(element);  
  if(obj) { with(obj.style) {  
   position="absolute";  
   top=baseY+y+"px";  
   left=baseX+x+"px";  
   if(typeof(z)=="number") { zIndex=z; }  
  } result=true; }  
 }  
  
 return result;  
}  

Allerdings werden die "Schatten-Bs" falsch positioniert, wenn dies außerhalb des im Browser sichtbaren Bereichs geschieht. Und mangels echtem Bedarf, habe ich es deswegen auch erstmal so gelassen ... ;)

Gruß, Cybaer

--
Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!