Я работаю над инструментом редактирования видео, и мне нужно поддерживать соотношение сторон 16:9
видео при изменении размера экрана по горизонтали и вертикали. До сих пор я работал так, как ожидалось, при изменении размера по горизонтали и при изменении размера по вертикали, но не могу заставить его работать при изменении размера по вертикали . Код Javascript, который я использовал для вычисления высоты видео и изменения его размера, приведен ниже (обратите внимание, что предложение else
пусто, потому что именно здесь код должен go):
const calculateHeight = () => {
// Get the other elements on the page
const header = document.querySelector('.main-navigation');
const meshTopBar = document.querySelector('.mesh__top-bar');
const footer = document.querySelector('.mesh__bottom-bar');
// Get the section to apply the window height to it
const mainSection = document.querySelector('.insert-level-container');
// Get the video elements
const editor = document.querySelector('.mesh__insert-editor-container');
const video = document.querySelector('.mesh__insert-editor-video-container');
// Apply the height to the main section by calculating the window height minus the other elements' height
if(mainSection !== null) {
mainSection.style.height = (window.innerHeight - header.offsetHeight - meshTopBar.offsetHeight - footer.offsetHeight) + 'px';
}
// This should be the ideal height for the video
video.style.minHeight = ((video.offsetWidth * 9) / 16) + 'px';
// If the video height is bigger than the section height (calculated above), then resize it
if(video.offsetHeight + 115 > mainSection.offsetHeight) {
video.style.minHeight = video.offsetHeight - 1 + 'px';
editor.style.maxWidth = video.offsetHeight * 16 / 9 + 'px';
} else {
// This is where the logic for the vertical resizing should go
}
}
релевантный CSS для этих элементов:
.mesh__insert-editor-container {
margin-left: auto;
margin-right: auto;
}
.mesh__insert-editor-video-container {
position: relative;
width: 100%:
}
И HTML:
<section class="mesh__insert-editor-container flex__one flex-container flex-column horizontally-left-aligned" id="video-main-container">
<div class="mesh__insert-editor-video-container flex-container horizontally-right-aligned flex-wrap">
<video class="mesh__insert-editor-video-placeholder"></video>
</div>
</section>
Весь этот код:
- Получите высоту из всех элементов на странице, суммируйте их и вычислите высоту основного раздела, вычитая эту высоту;
- Если высота видео становится больше, чем высота раздела, я уменьшаю его высоту на
-1px
каждый раз, когда окно изменяется размер и вычисляется новая ширина.
Весь приведенный выше код дает мне этот результат , который прекрасно работает для большинства сценариев ios, но мне нужно видео для увеличиваться, если условие оператора if
не выполнено. Все, что я пробовал в операторе else
, становится "нервным".
Любая лучшая альтернатива для решения этой проблемы будет высоко оценена. Спасибо всем!