Измерение высоты с помощью .offset для .lastElementChild
В javascript-коде мне нужно для последнего элемента (абзаца <p> или картинки <img>) в слое <div> измерить нижнюю координату.
Фрагмент js-скрипта:
//в переменную LastChildOfMainContentBorder записываем последний дочерний элемент слоя .border, находящегося в слое .main-content в слое .main
var LastChildOfMainContentBorder = document.querySelector("div.main .main-content .border").lastElementChild.innerHTML;
//вносим в переменную LastChildOfMainContentBorderHeight высоту последнего дочернего элемента этого слоя
var LastChildOfMainContentBorderHeight = document.querySelector("div.main .main-content .border").lastElementChild.innerHTML.offsetBottom;
//вывод инфы для отладки
alert ("LastChildOfMainContentBorder = " + LastChildOfMainContentBorder + "\n" + "LastChildOfMainContentBorderHeight = " + LastChildOfMainContentBorderHeight);
//alert выдает в качестве последнего дочернего элемента картинку (да, такая и есть), но ее координаты почему-то undefined:
/*
LastChildOfMainContentBorder = <img width = "550px" src = "..\Pictures for HORT text\Druid_night_tree.jpg">
LastChildOfMainContentBorderHeight = undefined
*/
Аналогично координаты и высота undefined, если я вместо .offsetBottom подставляю .offsetTop или .offsetHeight. Я так понимаю, что я неправильно, не в том виде, каком надо, передаю данные в переменную. А как сделать правильно? Мне в скрипте предстоит сравнивать высоту с другой высотой и при необходимости корректировать, после чего задавать ее нужному слою. |
var LastChildOfMainContentBorder = document.querySelector("div").lastElementChild.innerHTML;
var LastChildOfMainContentBorderHeight = document.querySelector("div").lastElementChild.getBoundingClientRect().bottom;
alert ("LastChildOfMainContentBorder = " + LastChildOfMainContentBorder + "\n" + "LastChildOfMainContentBorderHeight = " + LastChildOfMainContentBorderHeight);
|
j0hnik, спасибо. Для селектора по последнему дочернему элементу работает.
Только координата меняется от прокрутки страницы, а надо от некой фиксированной точки - в идеале или от верха родительского слоя <div>, или от верха страницы. Для этого рекомендуют использовать window.pageYOffset. Только я не пойму, как его приставить к .getBoundingClientRect().bottom и где указывать нулевую прокрутку? Еще почему то .getBoundingClientRect().bottom не пашет так:
var MainContentBottom = document.querySelector("div.main .main-content").getBoundingClientRect().bottom;
Ведь document.querySelector("div.main .main-content") уже задает полноценный элемент, т.е. <div> с сlass="main-content", и для него должна вычисляться координата. В чем же баг? |
var el = document.querySelector("div.main .main-content");
alert (el.offsetTop + el.offsetHeight)
отступ по нижней границы относительно родителя с position:relative |
Цитата:
var LastChildOfMainContentBorderBottom = window.pageYOffset + document.querySelector("div.main .main-content .border").lastElementChild.getBoundingClientRect().bottom;
window.pageYOffset - измеряет, на сколько прокручена страница по-вертикали. document.querySelector("div.main .main-content .border").lastElementChild.getBoundingClientRect() .bottom; - измеряет нижнюю координату слоя div с классом border относительно окна просмотра (верхнего левого угла, если я правильно понял?). Каждая из этих функций в зависимости от прокрутки страницы дает разный результат. Но их сумма одинакова, как бы не была прокручена страница, и является вертикальной координатой низа слоя с классом border относительно верха окна, что мне и нужно. |
Цитата:
|
| Часовой пояс GMT +3, время: 03:45. |