В jQuery есть .position(). В нативном:
$getPosition = function(o){
var x =0, y =0;
while(o){
x += o.offsetLeft ||0;
y += o.offsetTop ||0;
o = o.offsetParent || o.parentNode;
}
return {x:x, y:y};
}
Смещение будет разностью смещений блока и обрамляющего (который не всегда будет непосредственным родителем, поэтому цикл). Или напишите цикл с остановкой while(o && o.className !='класс_родителя'). Положение прокрутки выставляется через тот же scrollTop, высота блока — offsetHeight (вызывает reflow). scrollTop автоматически не выходит за пределы offsetHeight, поэтому близкие к краям блоки не окажутся точно в центре, но чаще всего это и нужно.