我有一個絕對定位設置爲允許垂直滾動的div。我的應用程序包括拖動&拖放設施,依靠我確定事件觸發時元素的座標。如何計算滾動div中的元素位置?
我用來計算元素位置的偏移量(即element.offsetLeft & element.offsetTop)僅與元素的原始位置相關,並且不考慮用戶滾動導致的位置變化。我想我可以補充一個更正,如果我可以計算距離滾動,但我不明白任何方式做到這一點(不同於窗口滾動)。
真的很感激任何建議。
我有一個絕對定位設置爲允許垂直滾動的div。我的應用程序包括拖動&拖放設施,依靠我確定事件觸發時元素的座標。如何計算滾動div中的元素位置?
我用來計算元素位置的偏移量(即element.offsetLeft & element.offsetTop)僅與元素的原始位置相關,並且不考慮用戶滾動導致的位置變化。我想我可以補充一個更正,如果我可以計算距離滾動,但我不明白任何方式做到這一點(不同於窗口滾動)。
真的很感激任何建議。
查看div容器的scrollTop和scrollLeft屬性。
謝謝你 - 夥計們應該訣竅 – PeterJ 2009-08-05 23:09:11
@PeterJ:如果這對你有用,你應該投票並接受他的回答。 – 2009-08-06 11:14:23
這是我正在實施的糾正措施,以防任何人感興趣。
謝謝你們。
/*
Find a html element's position.
Adapted from Peter-Paul Koch of QuirksMode at http://www.quirksmode.org/js/findpos.html
*/
function findPos(obj)
{
var curleft = 0;
var curtop = 0;
var curxscroll = 0;
var curyscroll =0;
while(obj && obj.offsetParent)
{
curyscroll = obj.offsetParent.scrollTop || 0;
curxscroll = obj.offsetParent.scrollLeft || 0;
curleft += obj.offsetLeft - curxscroll;
curtop += obj.offsetTop - curyscroll;
obj = obj.offsetParent;
}
return [curleft,curtop];
}
這裏的一個跨瀏覽器的解決方案,發現了一個元素的位置考慮到滾動的div/s和窗口滾動:
var isIE = navigator.appName.indexOf('Microsoft Internet Explorer') != -1;
function findElementPosition(_el){
var curleft = 0;
var curtop = 0;
var curtopscroll = 0;
var curleftscroll = 0;
if (_el.offsetParent){
curleft = _el.offsetLeft;
curtop = _el.offsetTop;
/* get element scroll position */
var elScroll = _el;
while (elScroll = elScroll.parentNode) {
curtopscroll = elScroll.scrollTop ? elScroll.scrollTop : 0;
curleftscroll = elScroll.scrollLeft ? elScroll.scrollLeft : 0;
curleft -= curleftscroll;
curtop -= curtopscroll;
}
/* get element offset postion */
while (_el = _el.offsetParent) {
curleft += _el.offsetLeft;
curtop += _el.offsetTop;
}
}
/* get window scroll position */
var offsetX = isIE ? document.body.scrollLeft : window.pageXOffset;
var offsetY = isIE ? document.body.scrollTop : window.pageYOffset;
return [curtop + offsetY,curleft + offsetX];
}
準確確定了一個元件被在屏幕上是一個困難的問題。你需要支持多個瀏覽器還是僅支持一個? – NotMe 2009-08-05 22:53:05
我忘了提及,我需要一個可以在ie6中工作的解決方案(國企 - 不是我的選擇......)。 – PeterJ 2009-08-05 22:55:59