忍者ブログ

19May

[PR]

Posted by in

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

13Jun

要素の座標、幅、高さを取得する。

Posted by No Name Ninja in Javascript Sample

obj.style.height、obj.style.widthで高さ、幅を取得する場合、スタイル設定していないと高さを取得することができません。
またborderの太さやpaddingによって影響を受けた長さが入っていないため、実質的な幅、高さとは異なります。
getBoundingClientRect()メソッドは、スタイル設定をしていなくても、テーブルや、画像などあらゆる要素の座標、幅、高さを取得することができます。

DEMO

解説

<script language="javascript" type="text/javascript">

onload = function(){
  var nodeList;
  nodeList = document.getElementsByTagName('div');
  for(var i=0; i<nodeList.length; i++){
    nodeList[i].onclick=getObjInfo;
  }
  nodeList = document.getElementsByTagName('img');
  for(var i=0; i<nodeList.length; i++){
    nodeList[i].onclick=getObjInfo;
  }
}

function getObjInfo(){
  var rect = this.getBoundingClientRect();
 
  var hgt;
  var wdh;
  if(rect.height){
    hgt = rect.height;
  }else{
    hgt  = rect.bottom - rect.top;
  }
  if(rect.width){
    wdh = rect.width;
  }else{
    wdh = rect.right - rect.left;
  }

  alert('X=' + rect.left + ' Y=' + rect.top + ' height=' + hgt + ' width=' + wdh);
}

</script>

対象要素のメソッドgetBoundingClientRect()を実行して、取得したオブジェクトの中に情報があります。
width、heightは一部のブラウザで対応していないので、rigtht、left、bottom、topを使用して計算します。
注意)このオブジェクトの情報をjavascriptで変更しても値は変更されません。変更するときはstyle属性を変更する必要があります。
注意2)スタイルの設定値と異なり、ボーダーの幅やpadding値も含まれた値がでます。


PR

Comment


Vodafone絵文字 i-mode絵文字 Ezweb絵文字