2009-08-05 9 views
2

私は、垂直スクロールを許可するように絶対位置を設定したdivを持っています。私のアプリには、イベントが発生したときに要素の座標を決定する私に依存するドラッグ機能&が含まれています。スクロールされたdivの要素位置を計算するにはどうすればよいですか?

要素の位置を計算するために使用するオフセット(element.offsetLeft & element.offsetTop)は、要素の元の位置のみに関連し、ユーザーがスクロールした結果の位置の変化を考慮しません。スクロールした距離を計算できれば修正を加えることができると思ったが、(ウィンドウのスクロールとは異なり)それを行う方法が見当たらない。

本当にありがとうございます。

+0

要素が画面上にあるし、難しい問題です。複数のブラウザをサポートする必要がありますか? – NotMe

+0

私は言いたいことを忘れていました。私はie6で動作するソリューションが必要です(SOE - 私の選択ではありません...)。 – PeterJ

答えて

3

divコンテナのscrollTopscrollLeftのプロパティを見てください。

+0

ありがとうございます - これはすべきことです – PeterJ

+0

@PeterJ:これがうまくいくなら、投票して彼の答えを受け入れるべきです。 –

0

これは私が誰かが興味を持っている場合の修正として実装しているものです。

ありがとうございます。

/* 
    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]; 
} 
1

ここでは、要素の位置は、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]; 
} 
関連する問題