JQuery'de, konum değerleri belgeye değil üst öğeye göre olan öğenin "üst, sol" özelliklerini nasıl ayarlayabilirim?


144

.offset([coordinates])yöntemi, öğenin koordinatlarını ayarlar, ancak yalnızca belgeye göre olur. Öyleyse bir öğenin koordinatlarını üst öğeye göre nasıl ayarlayabilirim?

.position()Yöntemin üst öğeye göre yalnızca "üst, sol" değerleri aldığını, ancak herhangi bir değer belirlemediğini gördüm .

İle denedim

$("#mydiv").css({top: 200, left: 200});

ama çalışmıyor.

Yanıtlar:


227

position:relativeÜst position:absoluteöğeye göre konumu ayarlamak için üst öğenin ve öğenin

$("#mydiv").parent().css({position: 'relative'});
$("#mydiv").css({top: 200, left: 200, position:'absolute'});

Bunun nedeni, position: absolute;konumların en yakın konumlandırılmış üst öğeye (yani, varsayılan dışında herhangi bir position özelliğine sahip en yakın üst öğe static) göre olmasıdır.


13
$("#mydiv").css({top: '200px', left: '200px', position:'absolute'});<- iyi $("#mydiv").css({top: '200', left: '200', position:'absolute'});<- kötü. Görünüşe göre, konum değerleri dizeyse , birimleri dahil etmelisiniz, aksi takdirde bir etkisi olmaz.
Bob Stein

1
Göreceli konumlandırılmış bir ebeveyne sahip olmayla ilgili not beni çok fazla hayal kırıklığına uğrattı. Teşekkür ederim.
NuclearPeon

39
$("#mydiv").css('top', 200);

$("#mydiv").css('left', 200);

7
biraz daha talimat burada yardımcı olacaktır
güvercin

1
veya $ ("# mydiv"). css ({'top': 200, 'left': 200});
Nick B

Başka bir deyişle, OP sadece basitçe "üst" ve "sol" dan alıntılarsa doğru olurdu?
RufusVS

13

JQuery UI'nin .position yöntemini deneyebilirsiniz .

$("#mydiv").position({
  of: $('#mydiv').parent(),
  my: 'left+200 top+200',
  at: 'left top'
});

Çalışan demoyu kontrol edin.


10
.position () bir ayarlayıcıya sahip değil
devnull69

Konumu tam olarak nerede belirleyebileceğini söylüyor? Bence sadece değerleri bulabilir, değiştiremez.
Chris

1
.position () yöntemi değerleri ayarlamıyor!
Max

Çok ilginç!!! Üst öğe öğesinin css position özelliğini ayarlayamadığınızda (ana yanıtta belirtildiği gibi) kodunuz çok kullanışlıdır, çünkü bir kullanıcı arabirimi widget'idir ve düzgün bir etkinlik için ayarlarını değiştirmek istemezsiniz. Tabii ki bu sadece jQuery kullanıcı arayüzü kullandığınızda olur. JQuery UI "sürüklenebilir" widget ile bu küçük sorunu buldum.
Max

6

Ben değer bir dize türü ise, 'px' (yani 90px) tarafından takip edilmesi gerektiğini buldum, burada değer bir tamsayı ise, otomatik olarak px ekleyecektir. width ve height özellikleri daha affedicidir (her iki tür eser de).

var x = "90";
var y = "120"
$(selector).css( { left: x, top: y } )        //doesn't work
$(selector).css( { left: x + "px", top: y + "px" } )        //does work

x = 90;
y = 120;
$(selector).css( { left: x, top: y } )        //does work

6

Dinamik sayfa için kod ofseti dinamiği

var pos=$('#send').offset().top;
$('#loading').offset({ top : pos-220});

0

Ayar konumuyla hafızamı tazeliyorum, bu kadar geç geliyorum, başkasının görüp görmeyeceğini bilmiyorum, ama -

Konum ayarlamaktan hoşlanmıyorum css(), ancak çoğu zaman iyi. Ben en iyi bahis position()xdazz tarafından belirtildiği gibi jQuery UI ayarlayıcı kullanmak olduğunu düşünüyorum . Ancak, jQuery kullanıcı arabirimi, bir nedenden ötürü bir seçenek değilse (henüz jQuery ise), bunu tercih ederim:

const leftOffset = 200;
const topOffset = 200;
let $div = $("#mydiv");
let baseOffset = $div.offsetParent().offset();
$div.offset({
  left: baseOffset.left + leftOffset,
  top: baseOffset.top + topOffset
});

Bunun avantajı, $divebeveyninin keyfi olarak göreli konumlandırmaya ayarlanmamasıdır (eğer $divebeveyninin kendisi başka bir şeyin içine mutlak konumlandırılmışsa?) Ben keşke büyük kenarı durumda olduğunu düşünüyorum $divherhangi yoktur offsetParent, değil emin dönecekti eğer document, nullya tamamen başka bir şey.

offsetParent 2008'de bazen jQuery 1.2.6'dan beri mevcuttur, bu nedenle bu teknik şimdi ve orijinal soru sorulduğunda çalışır.


0

offset()İşlevini kullan jQuery. İşte olurdu:

$container.offset({
        'left': 100,
        'top': mouse.y - ( event_state.mouse_y - event_state.container_top ) 
    });
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.