2011-09-13 16 views
6

Gizli bir öğeyi görüntülemek için aşağıdaki komut dosyasını yazdım, sonra sayfanın konumuna getirin. Bu fonksiyon, bir Onclick olayıyla adlandırılıroffsetHight ve offsetWidth, ilk onclick olayında yanlış hesaplanıyor, ikinci değil

function popUp(id,type) { 
var popUpBox = document.getElementById(id); 

popUpBox.style.position = "fixed"; 
popUpBox.style.display = "block"; 

popUpBox.style.zIndex = "6"; 

popUpBox.style.top = "50%"; 
popUpBox.style.left = "50%"; 

var height = popUpBox.offsetHeight; 
var width = popUpBox.offsetWidth; 
var marginTop = (height/2) * -1; 
var marginLeft = (width/2) * -1; 

popUpBox.style.marginTop = marginTop + "px"; 
popUpBox.style.marginLeft = marginLeft + "px"; 
} 

, offsetHeight ve offsetWidth böylece doğru elemanının merkezleme olup, yanlış hesaplanır. Onclick öğesine ikinci kez tıklarsam, offsetHeight ve offsetWidth doğru bir şekilde hesaplar.

Siparişi değiştirdiğim her şekilde değiştirmeyi denedim ve bu beni deli ediyor! Herhangi bir yardım çok takdir edilir!

+0

Hmm, kodunuz benim için iyi görünüyor? http://jsfiddle.net/mrtsherman/SdTEf/1/ – mrtsherman

+3

@mtrsherman, TEŞEKKÜR EDERİZ. Sen jsfiddle bana yollarımın hatasını gösterdi. Dikkat edelim: Eğer yüksekliği ve genişliği belirlemek istediğiniz eleman için bir yükseklik ve genişlik tanımlamazsanız, ofsetHeight ve offsetWidth kullanarak doğru yükseklik ve genişlik elde edemezsiniz. – saoyr5

+0

Yay. Bunu çözdüğüne sevindim. Her şeyin yolunda göründüğü, ancak böyle olmayan problemler - başımı patlatmak istiyor! – mrtsherman

cevap

1

Uzunluğunuzun ve genişliğinin üstte tanımlanmadığını tahmin ediyorum. İyi çalıştığın bu kemanı gör. Oğlum ben akıllıyım. http://jsfiddle.net/mrtsherman/SdTEf/1/

Eski Cevap Bunu daha basit bir çok yapılabilir düşünüyorum. Üst ve sol özellikleri% 50 olarak ayarlıyorsunuz. Bu, sabit elemanı merkezden hafifçe çıkarır. Negatif kenar boşluklarını kullanarak doğru konuma geri çekmeye çalıştığınızı düşünüyorum. Bunun yerine - sadece başlangıçtan doğru üst/sol değerleri hesaplayın ve marj hakkında endişelenmeyin. İşte bir jQuery çözümü, ancak sade js'ye kolayca uyarlanabilir. Ayrıca, pencerenin hiç kaydırılmamış olması durumunda mevcut kodunuzun çalışmadığını düşünüyorum.

//this code will center the following element on the screen 
$('#elementid').click(function() { 
    $(this).css('position','fixed'); 
    $(this).css('top', (($(window).height() - $(this).outerHeight())/2) + $(window).scrollTop() + 'px'); 
    $(this).css('left', (($(window).width() - $(this).outerWidth())/2) + $(window).scrollLeft() + 'px'); 
}); 
+0

Doğru, yoldan çalışacaksınız (offsetHeight ve ofsetWidth öğesinin doğru olduğundan emin olmak için test ettim), pencereyi yeniden boyutlandıramaz ve div kalıbı mükemmel bir şekilde ortalanmış, Bakıyorum. OfsetHeight ve offsetWide'in neden doğru numaraları vermediğiyle ilgili olarak gerçekten çok ilgileniyorum, çünkü bu css tekniğini her zaman kullandığım için her zaman istenen etkiyi veriyor. – saoyr5

+0

Ahh, şimdi anlıyorum. Sorunuzu kıskanıyorum, umarım birileri size daha iyi bir cevap verir. Yukarıdakileri $ (window) .resize() 'olayına bağlayabilirsiniz, ancak yönteminiz kesinlikle daha şıktır. – mrtsherman

İlgili konular