offset & offsetParent

by yakun chen

HTML

<div class="container">
  <span id="short">Short span. </span>
  <span id="long">Long span that wraps withing this div.</span>
</div>

<div id="box">
  this is in box
</div>

CSS

.container {
  width: 300px;
  border-color:blue;
  border-style:solid; 
  border-width:3px;
  left: 15px;
  position: relative;
  margin-left: 3px;
  padding-left: 2px;
}
#short {
    margin-left: 5px;
    /* padding-left: 3px; */
    border: 2px solid green;
    position: relative;
    left: 2px;
}
#long {
    margin-left: 20px;
}
#box {
  position: absolute; 
  border-color: red;
  border-width: 1px; 
  border-style: solid; 
  z-index: 10
}

JavaScript

var box = document.getElementById("box")
var short = document.getElementById("short")
var long = document.getElementById("long")


var offset = function (el) {
  var _x = 0;
  var _y = 0;


	// 这里使用 getBoundingClientRect() 也可以啊 ???
  while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
    _x += el.offsetLeft - (el.tagName != 'BODY' ? el.scrollLeft : 0)
    _y += el.offsetTop - (el.tagName != 'BODY' ? el.scrollTop : 0 )
    el = el.offsetParent
  }

  return {
    top: _y,
    left: _x
  }
}

var meta = {
	/**
  *  margin + left + border, 起点是 padding 的左上角
  */
	short_offsetLeft: short.offsetLeft
  ,short_offsetParent: short.offsetParent
	,short_offset: offset(short)
}
  
console.log(meta)