Вход

Просмотр полной версии : offset - установка местоположения для невидимых элементов.


winch
16.01.2017, 17:03
Объясните пожалуйста, почему jquery функция offset некорректно устанавливает местоположение невидимым элементам?

я заметил, что при таком вызове:
$("#id").show().offset({left: 100, top: 100 }); всё хорошо.
а если сделать так:
$("#id").offset({left: 100, top: 100 }).show();
то при каждом новом выполнении этого кода, элемент смещается чуть ниже и правее, хотя координаты в обеих случаях задаются абсолютные.

TestUser013
17.01.2017, 00:45
http://api.jquery.com/offset/

Note: jQuery does not support getting the offset coordinates of hidden elements or accounting for borders, margins, or padding set on the body element.
While it is possible to get the coordinates of elements with visibility:hidden set, display:none is excluded from the rendering tree and thus has a position that is undefined.

Странно что второй вариант вообще работает :)

winch
17.01.2017, 08:21
Немного не то.
Там написано, что не поддерживается получение координат для скрытых элементов, а я пытаюсь установить координаты скрытому, а потом показать его.

http://rem-mastera.ru/media/imgs/tmp/jquery_offset.html здесь демо пример сделал, для наглядности.

ksa
17.01.2017, 09:27
хотя координаты в обеих случаях задаются абсолютные
У тебя не совсем верное представление об абсолютных координатах... :)

Ты пытаешься использовать координаты относительно документа. ;)

ksa
17.01.2017, 09:43
я пытаюсь установить координаты скрытому, а потом показать его.
И ты решил, что это будет работать... Но оно не работает.

рони
17.01.2017, 09:53
offset
$("#FloatForm").css({ left:100, top:100}).show();

winch
17.01.2017, 10:02
winch, там плагин сам позиционирует и ты еще из вне пытаешься - вот такой эффект и получается в результате.

ну я же делаю offset({ left:100, top:100}), по логике координаты должны записаться поверх и затереть, то что позиционирует плагин. а получается, что они как бы добавляются к предыдущей позиции.

winch
17.01.2017, 10:08
У тебя не совсем верное представление об абсолютных координатах... :)

Ты пытаешься использовать координаты относительно документа. ;)

а координаты относительно документа и абсолютные - это не одно и тоже?
ну хотя это не важно. вопрос был почему метод offset для видимых и невидимых элементов устанавливает позицию по разному.

winch
17.01.2017, 10:15
$("#FloatForm").css({ left:100, top:100}).show();
добавил к своему примеру вариант через css. да, в этом случае работает корректно. но мне просто интересно почему offset с невидимыми элементами работает так странно.

ksa
17.01.2017, 10:18
мне просто интересно почему offset с невидимыми элементами работает так странно
Запиши это как особенность. :D

winch
17.01.2017, 10:44
winch, по какой логике) click в плагине весит делегированно на документе, твой же click весит непосредственно на элементе, поэтому в процессе всплытия события сперва сработает твой клик, а уже затем клик плагина.
клик плагина должен делегировано срабатывать на элементах с классом .FloatFormAnchor
в данном случае он не работает.

winch
17.01.2017, 14:25
А мне казалось так: зачем ему знать своё текущее значение, если я ему говорю встать в уже определенную относительно документа позицию?
по идеи его текущее местоположения никого интересовать не должно.

ну да ладно, как посоветовал ksa, запишем это как особенность :)

winch
17.01.2017, 16:52
ясно. спасибо за разъяснение.