Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.11.2018, 23:26
Новичок на форуме
Отправить личное сообщение для Filinvit Посмотреть профиль Найти все сообщения от Filinvit
 
Регистрация: 27.10.2018
Сообщений: 8

Измерение высоты с помощью .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.
Я так понимаю, что я неправильно, не в том виде, каком надо, передаю данные в переменную. А как сделать правильно?
Мне в скрипте предстоит сравнивать высоту с другой высотой и при необходимости корректировать, после чего задавать ее нужному слою.

Последний раз редактировалось Filinvit, 09.11.2018 в 23:37.
Ответить с цитированием
  #2 (permalink)  
Старый 09.11.2018, 23:42
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

var LastChildOfMainContentBorder = document.querySelector("div").lastElementChild.innerHTML;
var LastChildOfMainContentBorderHeight = document.querySelector("div").lastElementChild.getBoundingClientRect().bottom;
alert ("LastChildOfMainContentBorder = " + LastChildOfMainContentBorder + "\n" + "LastChildOfMainContentBorderHeight = " + LastChildOfMainContentBorderHeight);

Последний раз редактировалось j0hnik, 09.11.2018 в 23:46.
Ответить с цитированием
  #3 (permalink)  
Старый 10.11.2018, 23:21
Новичок на форуме
Отправить личное сообщение для Filinvit Посмотреть профиль Найти все сообщения от Filinvit
 
Регистрация: 27.10.2018
Сообщений: 8

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", и для него должна вычисляться координата. В чем же баг?

Последний раз редактировалось Filinvit, 11.11.2018 в 00:07.
Ответить с цитированием
  #4 (permalink)  
Старый 11.11.2018, 06:39
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

var el = document.querySelector("div.main .main-content");
alert (el.offsetTop + el.offsetHeight)

отступ по нижней границы относительно родителя с position:relative
Ответить с цитированием
  #5 (permalink)  
Старый 11.11.2018, 08:18
Новичок на форуме
Отправить личное сообщение для Filinvit Посмотреть профиль Найти все сообщения от Filinvit
 
Регистрация: 27.10.2018
Сообщений: 8

Сообщение от Filinvit Посмотреть сообщение
Только координата меняется от прокрутки страницы, а надо от некой фиксированной точки - в идеале или от верха родительского слоя <div>, или от верха страницы. Для этого рекомендуют использовать window.pageYOffset. Только я не пойму, как его приставить к .getBoundingClientRect().bottom и где указывать нулевую прокрутку?
Кажется, я понял, как эту часть реализовать. Я себе совсем иначе представлял принцип работы этой функции, а оказалось просто:

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 относительно верха окна, что мне и нужно.

Последний раз редактировалось Filinvit, 11.11.2018 в 08:21.
Ответить с цитированием
  #6 (permalink)  
Старый 11.11.2018, 08:28
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

Сообщение от Filinvit
(верхнего левого угла, если я правильно понял?).
почему левого? просто от верхней границы
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск классов внутри тега yozuul jQuery 24 14.06.2013 22:00
не работает в IE скрипт для кросс-доменного вычисления высоты iframe i.lyadov Internet Explorer 5 02.03.2013 02:35
Min-height для блоков с помощью JavaScript STyLe Общие вопросы Javascript 5 23.07.2012 17:34
можно ли с помощью js написать код для симуляции нажатия на клавиш. KamalovRadik Мобильный JavaScript 7 17.02.2012 22:27
как с помощью javascript установить selected для тега option? re-kru-t Общие вопросы Javascript 1 19.02.2011 15:49