Математические расчеты для адаптивного масштабирования элемента с предками на JS? Пишу приложене, которое должно уметь масштабировать элементы как к примеру в фотошопе: есть контейнер, в не определенное количество элементов, которые при уменьшении/увеличении контейнера должны вместе с ним адаптированно уменьшаться/увеличиваться, к примеру как на сервисе canva.com, когда презентацию уменьшаешь или увеличиваешь то элементы должны подстраиваться.
Так как все это должно работать на js, адаптиваная верстка не катит)
Из размышлений я пришел к следующему:
Элементы должны менять только размеры (ширину, высоту с учетом соотношения сторон).
Смещения никакого тоже не нужно (top, left, translateX/Y)
Написал код изменения размера элемента (только для уменьшения):let width = this.container.clientWidth;
let scalePercent = (this.maxWidth - width) * 100 / this.maxWidth; // this.maxWidth - это изначальная ширина контейнера, самая большая.
let elemWidth = this.container.clientWidth - (scalePercent * 100 / this.container.clientWidth);
let height = (width * this.aspectRatio / 100);
elemstyle.height = height + 'px';
elem.style.width = width + 'px';
В общем я высчитываю процент из ширины контейнера - текущая ширина контейнера, потом из этого процента получаю нужную ширину для элемента. Ну и высоту ставлю пропорционально ширине.
И это не работает правильно. Элементы уменьшаются очень быстро, до точек...
Подскажите рабочий способ пожалуйста.

21 Авг 2019 в 06:05
170 +1
1
Ответы
1

Для реализации адаптивного масштабирования элементов с учетом изменения размеров их родительского контейнера на JavaScript, вам нужно правильным образом рассчитывать новые размеры элементов на основе изменения размеров контейнера и соотношения сторон элементов. Вот как это можно сделать:

// Получаем текущие размеры контейнера
let containerWidth = this.container.clientWidth;
let containerHeight = this.container.clientHeight;
// Рассчитываем коэффициент масштабирования по ширине и высоте
let scaleX = containerWidth / this.maxWidth;
let scaleY = containerHeight / this.maxHeight;
// Применяем масштабирование к каждому элементу
this.elements.forEach(element => {
let elementWidth = element.initialWidth * scaleX;
let elementHeight = element.initialHeight * scaleY;
// Применяем новые размеры элемента
element.style.width = elementWidth + 'px';
element.style.height = elementHeight + 'px';
});

В этом примере мы сначала получаем текущие размеры контейнера, затем рассчитываем коэффициент масштабирования для ширины и высоты относительно изначальных максимальных размеров. Затем применяем этот коэффициент к каждому элементу, умножая его на изначальные размеры элементов.

Убедитесь, что у элементов изначально заданы исходные ширина и высота (initialWidth и initialHeight), и что они корректно устанавливаются при инициализации элементов.

Надеюсь, этот код поможет вам реализовать адаптивное масштабирование элементов на JavaScript.

20 Апр в 13:24
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 83 829 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир