2012-07-02 4 views
0

Итак, у меня есть megamenu, над которым я работаю, и я хочу, чтобы он соответствовал размеру экрана. Когда подменю опущено, я не хочу, чтобы он находился на краю экрана. Икота в моем плане заключается в том, что я не знаю, как определить позицию элемента, прежде чем он будет виден в браузере. Есть ли способ сделать это?Как получить позицию скрытого объекта

+0

Я просто онемел. Вместо этого я собираюсь проверить родительскую позицию. Спасибо за помощь, хотя! – Chad

+0

Позиция родителя не обязательно должна иметь ту же позицию. Я бы не стал полагаться на эту информацию. Особенно при относительном или абсолютном позиционировании. – Alp

+0

Ребенок имеет фиксированную ширину (300 пикселей). Я проверяю, может ли элемент поместиться на экране, а если он не может, я перемещаю начальную позицию div. Это то, что я придумал (см. Выше). – Chad

ответ

0
if($(this).offset().left - 90 < window.screenLeft) { 
    $(this).next().css('left','0') 
} 
else if($(this).offset().left + $(this).outerWidth() + 90 > window.innerWidth) { 
    $(this).next().css('right', '0') 
} 
else { 
    $(this).next().css('left', '-90px') 
} 
+0

Вот что я придумал. – Chad

3

Элемент не есть позиция, пока она не виден обозревателю.

2

Вы можете дать элементу непрозрачность 0,01, а затем проверить его положение. Это делает видимым, но все еще невидимым для обычного пользователя.

var offset = $(selector).show().css('opacity',0.01).offset(); 
$(selector).css('opacity',1).hide(); 
+0

Интересно ... Интересно, будет ли это работать с нулевой непрозрачностью. – egasimus

+1

@egasimus Неверно в браузерах. – iambriansreed

0

Вы могли бы показать элемент, чтобы получить свою позицию и скрыть его потом:

var element = $('#element'); 
element.show(); 
var position = element.position(); 
element.hide(); 

DEMO

Смежные вопросы