2009-05-06 29 views
7

Orada zafer açıklandı geçenlerde comp.lang.javascript bu konuda bir iplik oldu ama hiçbir kod yayınlanmıştır: Bir HTML sayfasında Bir HTML düğmesinin veya resminin koordinatlarını, çapraz tarayıcıyı nasıl bulabilirim?

nasıl sol alt köşesinde bir elementin koordinatları (resmi veya düğme bulurum , tarayıcılar ve sayfa stilleri arasında güvenilir bir şekilde söyleyebilir misiniz? "Ajax in Action" (kopyaladığım) belgesinde savunulan yöntem, bazı durumlarda IE'de çalışmıyor gibi görünüyor. Sorunu daha kolay hale getirmek için, küresel belge stilini "geleneksel" veya "geçiş" ya da her ne olursa olsun ayarlayabileceğimizi varsayalım.

Lütfen kodu veya kod için bir işaretçi (lütfen tüm tarayıcılarda çalışan tam bir işlev) sağlayın - sadece "bu kadar kolay" deyin ve DOM'u kasıp kavuran şey hakkında konuşmayın - eğer bu tür bir yazı okumak istersem şey ben comp.lang.javascript için geri döneceğim. Lütfen bu bir tekrar ve beni çözüm için işaret - beni bulmaya çalıştım beni azarladı.

+2

Kutsal (* &^Sadece jquery çözümüne baktım: DOM'a her akla gelebilecek etiketi içeren gizli bir eleman ekleyin ve sonra geometri kurallarının tersine mühendislik yapın.Veb, gerçekten harika bir yer! –

+1

Burada ejderhalar var –

cevap

9

, JQuery kullanıyor işe böyle şeyler almak için tek kesin yolu (korkmayın sadece içermek zorunda olduğunuz bir dış komut dosyasıdır. Sonra herhangi genelinde mükemmel bir performans sergiliyor güncel koordinatlarını ve şimdiye kadar karşılaştığınız tüm tarayıcıları almak için

$('#element').position() 

veya

$('#element').offset() 

gibi bir ifade kullanabilirsiniz.

+0

30k deneyin? En azından, nasıl sıkıştırılmamış bir kaynak bulabildiğimi varsayarak nasıl uyguladıklarını görmeye çalışabilirim. –

+1

Sadece JQuery kaynağına baktım ve işlevler birbirine bağlı olarak görünüyor.Sadece birkaç satır kod çıkarmak için çok fazla (en azından benim tadı için). Genellikle bunu yapan insanlardan nefret ediyorum, ancak şimdi devam edip şu anda bir tane olacağım: JQuery, size karşı birçok kaygı kazandıracak ve 30k, önbelleğe alınacak bir şey için bu kadar çok veri içermiyor. yine de istekleri. Genellikle çerçevelerden nefret eden birinden alın ;-) – Udo

1

bu deneyin: jQuery yılında

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, bu ne işe yaramıyor (bazen). –

+0

Çalışılmadığında somut bir örnek verebilir misiniz? – Greg

+0

Elbette http://aaron.oirt.rutgers.edu/myapp/docs/W.intro. Dipnotları IE'de bu algoritmayı kullanarak konumlandırmaya çalışırsam, sayfa sağda görünür. –

1

: Tecrübelerime göre

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

Bunu kullanıyorum, hem IE hem de Firefox için çalışıyor.

 
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

Belirtildiği gibi, bu tutarlı bir şekilde çalışmaz. "Sıkı" html kullanırsam ya da çalışmaya başlayacak olursa. Bu numaraysa lütfen bilgilendirin. JQuery kitaplığı, yukarıdaki gibi ele alınmayan kenar boşlukları gibi şeyleri de dikkate almanız gerektiğini gösterir. –

4

Bu özümü web'den buldum ... Bu Tamamen Sorunumu Çözdü. Lütfen bu bağlantıyı kaynak için kontrol edin. 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}; 
    } 
} 
(çok diğerlerinde Hope) Firefox, IE8'i Opera Mükemmel

İşleri bilgilerini ... Saygılar paylaşan olanlara sayesinde

adinamik

İlgili konular