2009-05-06 6 views
7

あり の勝利が発表されたが、何のコードが掲載されなかったところcomp.lang.javascriptで、この上のスレッドが最近だった:HTMLボタンや画像の座標をブラウザで見つける方法は?

のHTMLページでは、要素(画像やボタンの左下隅の座標を見つけるのですか、) は、ブラウザやページスタイルを問わず信頼性がありますか? 「Ajax in Action」(私が持っているコピー)で提唱されている方法は、ある状況下ではIEで動作しないようです。問題を簡単にするために、グローバルドキュメントスタイルを "伝統的"または "過渡的"なものに設定できると仮定しましょう。

すべてのブラウザで機能する完全な機能のコードまたはコードを提供してください - 「簡単です」と言って、DOMを走査するものについてはじめるのではなく、私はcomp.lang.javascriptに戻るでしょう。これが繰り返されているのであれば私に叱責してください。私はそれを見つけようとしました。

+2

聖(* &^私はjqueryのソリューションを見ました:考えられるすべてのタグを含むDOMに隠し要素を追加してから、ジオメトリ規則をリバースエンジニアリングしてください。Webは本当に素晴らしい場所です! –

+1

ここにドラゴンがあります –

答えて

9

JQueryを使用している仕事に、このようなものを取得する唯一の確実な方法を(恐れることはありません。 、それはあなたがインクルードしなければならない外部スクリプトファイルです)。そして、あなたは私がこれまで出会った任意およびすべてのブラウザ間で良好に動作している、現在の座標を取得するために

$('#element').position() 

または

$('#element').offset() 

のようなステートメントを使用することができます。

+0

30k?まあ、少なくとも私は見て、彼らがそれを実装する方法を見てみることができます - 私は非圧縮のソースを見つけることができると仮定します。 –

+1

私はちょうどJQueryのソースを見ており、関数は大きく依存しているようです。あまりにも多くのコードを抽出する(少なくとも私の味のために)。 私は通常、これを行う人は嫌いですが、私は先に進んで1つになります:JQueryはあなたに多くの心配を救います.30kは実際にはキャッシュされるものとにかくリクエスト。一般的にフレームワークを嫌う人から取ってください;-) – Udo

1

これを試してみてください:jQueryので

var elm = document.getElementById('foo'); 
var point = {x:0,y:elm.offsetHeight}; // Change to y:0 to get the top-left 

while (elm) 
{ 
    // This will get you the position relative to the absolute container, 
    // which is what you need for positioning an element within it 
    if (elm.style.position == 'absolute') 
     break; 

    point.x += elm.offsetLeft; 
    point.y += elm.offsetTop; 

    elm = elm.offsetParent; 
} 
+0

Greg、これは(時には)動作しないものです。 –

+0

それがうまくいかないときの具体例を教えてもらえますか? – Greg

+0

確かにhttp://aaron.oirt.rutgers.edu/myapp/docs/W.intro。 IE上でそのアルゴリズムを使用して脚注を配置しようとすると、ページの右側に表示されます。 –

1

:私の経験で

var jq = $('#yourElement'); 
var position = jq.offset(); 
alert('x: ' + position.left + ', y: ' + position.top); 

var bottomLeftPixelPosition = 
    { left: position.left, top: position.top + jq.height() - 1; }; 
2

私はこれを使用しており、IEとFirefoxの両方で動作します。

 
var Target = document.getElementById('SomeID'); 
var Pos = findPos(Target); 

AnotherObj = document.getElementById('AnotherID'); 
AnotherObj .style.top = Pos[1] + "px"; 
AnotherObj .style.left = Pos[0] + "px"; 

//------------------------------------ 
function findPos(obj) { 
//---------------------------------------- 
    var curleft = curtop = 0; 
    if (obj.offsetParent) { 
    do { 
      curleft += obj.offsetLeft; 
      curtop += obj.offsetTop; 
    } while (obj = obj.offsetParent); 
    return [curleft,curtop]; 
    } 
} 
+0

前述のように、これは一貫して機能しません。それは、私が "厳密な" HTMLを使用する場合、またはそれが何か作業を開始することがあります。それがトリックであるかどうかお知らせください。 jqueryライブラリは、上記で扱われていない余白のようなものも考慮する必要があることを示しているようです。 –

4

私はこの解決策をウェブから見つけました...これは完全に解決しました。 このリンク先を確認してください。 (あまりにも他の人ホープ)のFirefox、IE8で完璧 http://www.quirksmode.org/js/findpos.html

/** This script finds the real position, 
* so if you resize the page and run the script again, 
* it points to the correct new position of the element. 
*/ 
function findPos(obj){ 
    var curleft = 0; 
    var curtop = 0; 

    if (obj.offsetParent) { 
     do { 
     curleft += obj.offsetLeft; 
     curtop += obj.offsetTop; 
     } while (obj = obj.offsetParent); 

     return {X:curleft,Y:curtop}; 
    } 
} 

作品、オペラ知識を共有する人に おかげで... よろしく、

無力性

関連する問題