ホームページ  >  記事  >  ウェブフロントエンド  >  javascript_javascript スキルのオフセット、クライアント、スクロールの属性の概要

javascript_javascript スキルのオフセット、クライアント、スクロールの属性の概要

WBOY
WBOYオリジナル
2016-05-16 15:45:261228ブラウズ

HTML 要素には、offset、client、scroll で始まるいくつかの属性があり、常に混乱を招きます。本で見たことを書き留めて、それを必要とする友人と共有してください。主に次の属性:

最初のグループ: offsetWidth、offsetHeight、offsetLeft、offsetTop、offsetParent

2 番目のグループ: clientWidth、clientHeight、clientLeft、clientTop

3 番目のグループ:scrollWidth、scrollHeight、scrollLeft、scrollTop

詳細な定義は次のとおりです。

1.1 HTML 要素の offsetWidth と offsetHeight は、要素の境界線とパディングを含む画面サイズを CSS ピクセル単位で返しますが、外側のマージンは返しません。

1.2 offsetLeft プロパティと offsetTop プロパティは要素の X 座標と Y 座標を返します。通常、戻り値はドキュメント座標です。ただし、位置指定された要素およびその他の要素 (テーブル セルなど) の子孫の場合、これらのプロパティによって返される座標は、ドキュメントではなく祖先要素を基準としています。

1.3 offsetParent 属性は、offsetLeft と offsetTop を基準とした親要素を指定します。 offsetParent が null の場合、後の 2 つの戻り値はドキュメント座標です。一般に、offsetLeft と offsetTop を使用して要素 e の位置を計算するには、ループが必要です。

//计算元素的文档坐标
function getElementPosition(e){
  var x=0,y=0;
  while(e !=null){
    x +=e.offsetLeft;
    y +=e.offsetTop;
    e=e.offsetParent; 
  }
  return {x:x, y:y} ;  
} 

このメソッドで計算された位置は常に正しいとは限りません。組み込みの getBoundingClientRect() メソッドを使用することをお勧めします。

2.1 clientWidth と clientHeight は、境界線のサイズを含まず、コンテンツとパディングのみを含むことを除いて、offsetWidth プロパティと offsetHeight プロパティに似ています。同時に、ブラウザーがパディングとボーダーの間にスクロール バーを追加する場合、clientWidth と clientHeight の戻り値にはスクロール バーは含まれません。 clientWidth と clientHeight は、タイプ 5a8028ccc7a7e27417bff9f05adf5932、ffbe95d20f3893062224282accb13e8f、45a2772a6b6107b401db3c9b82c049c2 のインライン要素に対して常に 0 を返すことに注意してください。

2.2 clientLeft と clientTop は、要素のパディングの外端とその境界線の外端の間の水平方向と垂直方向の距離を返します。通常、これらの値は左端と上端の境界線の幅に等しくなります。ただし、要素にスクロール バーがあり、ブラウザがそれらのスクロール バーを左または上に回転させる場合、スクロール バーの幅も含まれます。インライン要素の場合、それらは常に 0 です。通常、clientLeft と clientTop はほとんど役に立ちません。

3.1scrollWidth と scollHeight は、要素のコンテンツ領域とそのパディングとオーバーフローしたコンテンツのサイズです。コンテンツがオーバーフローすることなくコンテンツ領域と正確に一致する場合、これらのプロパティは clientWidth および clientHeight と等しくなります。ただし、オーバーフローすると、オーバーフローの内容が含まれ、戻り値は clientWidth および clientHeight より大きくなります。

3.2scrollLeftとscrollTopは要素のスクロールバーの位置を指定します。スクロールレフトとスクロールトップは書き込み可能であり、要素内のコンテンツをスクロールするように設定できることに注意してください (HTML 要素には、Window オブジェクトのようなscrollTo() メソッドがありません)。

obj.offset[WidthHeightTopLeft] 親コントロールを基準としたコントロールの位置を取得します
event.offset[XY] は、イベント
をトリガーしたコントロールのマウス フェーズの座標を取得します。 event.screen[XY] スクリーン座標を基準としたマウス
events.client[XY] Web ページに対するマウス座標は
にあります。 obj.scroll[WidthHeightTopLeft] オブジェクトスクロールのサイズを取得します
obj.client[WidthHeightTopLeft] オブジェクトの表示領域のサイズを取得します

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<style type="text/css">
<!--
div{
font-family: "宋体";
font-size: 12px;
color: #000000;
}
#div1{
position:absolute;
background-color:#f0f0f0;
width:200px;
height:200px;
left:20px;
top:0px;
z-index:1;
}
#div2{
background-color:#cfc0cf;
width:200px;
height:210px;
position:absolute;
left:261px;
top:347px;
z-index:100;
}
#div3{
background-color:#abbfbf;
width:200px;
height:200px;
position:absolute;
left:20px;
top:247px;
z-index:100;
}
#div4{
background-color:#cfcfcf;
width:200px;
height:200px;
position:absolute;
left:461px;
top:147px;
z-index:100;
}
-->
</style>
</head>
<body>
<div id='div1' >offset 控件相对于父窗体的位置</div>
<script>
function offset(ids){
ids.innerHTML="offsetLeft ="+ids.offsetLeft+"<BR>";
ids.innerHTML+="offsetWidth ="+ids.offsetWidth+"<BR>";
ids.innerHTML+="offsetHeight ="+ids.offsetHeight+"<BR>";
ids.innerHTML+="offsetTop ="+ids.offsetTop+"<BR>";
ids.innerHTML+="event.offset 鼠标相对于控件的位置<BR>";
ids.innerHTML+="offsetX ="+event.offsetX+"<BR>";
ids.innerHTML+="offsetY ="+event.offsetY+"<BR>";
}
function screen(ids){
ids.innerHTML="scrollWidth ="+ids.scrollWidth+"<BR>";
ids.innerHTML+="scrollHeight ="+ids.scrollHeight+"<BR>";
ids.innerHTML+="scrollTop ="+ids.scrollTop+"<BR>";
ids.innerHTML+="scrollLeft ="+ids.scrollLeft+"<BR>";
}
function client(ids){
ids.innerHTML="clientWidth ="+ids.clientWidth+"<BR>";
ids.innerHTML+="clientHeight ="+ids.clientHeight+"<BR>";
ids.innerHTML+="clientTop ="+ids.clientTop+"<BR>";
ids.innerHTML+="clientLeft ="+ids.clientLeft+"<BR>";
}
function eventc(ids){
ids.innerHTML="鼠标相对于屏幕坐标<BR>event.screenX="+event.screenX+"<BR>";
ids.innerHTML+="event.screenY ="+event.screenY+"<BR>";
ids.innerHTML+="鼠标相对于网页坐标event.clientX="+event.clientX+"<BR>";
ids.innerHTML+="event.clientY ="+event.clientY+"<BR>";
}
</script>
</body>
</html>

各ブラウザにはこれらのプロパティがあり、一部の値が異なる場合があります。

自分でコードを書いて結果を比較すれば理解できます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。