назад до уроку

Знайти координати поля відносно вікна

У iframe нижче ви можете побачити документ із зеленим «полем».

Використовуючи JavaScript, знайдіть координати кутів відносно вікна, на які вказано стрілками.

Для зручності в документі реалізована невелика функція, яка показує координати кліку.

Ваш код повинен використовувати DOM для отримання чотирьох пар координат відносно вікна:

  1. Верхній лівий, зовнішній кут (це просто).
  2. Правий нижній, зовнішній кут (теж просто).
  3. Верхній лівий, внутрішній кут (трохи складніше).
  4. Правий нижній, внутрішній кут (є кілька способів, оберіть один).

Обчислені координати повинні збігатися з тими, які повертаються клацанням миші.

P.S. Код також повинен працювати, якщо елемент має інший розмір або рамку, тобто не прив’язаний до жодних фіксованих значень.

Відкрити пісочницю для завдання.

Зовнішні кути

Зовнішні кути – це саме те, що ми отримуємо в результаті виклику elem.getBoundingClientRect().

Координати верхнього лівого кута answer1 і нижнього правого кута answer2:

let coords = elem.getBoundingClientRect();

let answer1 = [coords.left, coords.top];
let answer2 = [coords.right, coords.bottom];

Лівий верхній внутрішній кут

Координати внутрішнього кута відрізняється від зовнішнього на ширину рамки. Надійним способом їх отримання є використання clientLeft/clientTop:

let answer3 = [coords.left + field.clientLeft, coords.top + field.clientTop];

Правий нижній внутрішній кут

У нашому випадку нам потрібно відняти розмір рамки від зовнішніх координат.

Можемо використати CSS властивості:

let answer4 = [
  coords.right - parseInt(getComputedStyle(field).borderRightWidth),
  coords.bottom - parseInt(getComputedStyle(field).borderBottomWidth)
];

Альтернативним способом було б додавання clientWidth/clientHeight до координат лівого верхнього кута. Це, мабуть, навіть краще:

let answer4 = [
  coords.left + elem.clientLeft + elem.clientWidth,
  coords.top + elem.clientTop + elem.clientHeight
];

Відкрити рішення в пісочниці.