Я пытаюсь вычислить, есть ли в горизонтальном меню место для всех элементов меню, а если нет, то помещаю переполненные элементы в раскрывающийся список.
Вот что у меня есть. Это работает - почти - потому что иногда рассчитывается неправильно. Попробуйте изменить размер окна — вы увидите что-то вроде этого:
const nav = document.querySelector(".navbar");
const contentBar = nav.querySelector(".navbar-nav");
const navItems = document.querySelectorAll(".navbar-nav > li:not(.grouped)");
const allItems = contentBar.querySelectorAll('li');
const dropdown = nav.querySelector(".grouped-content");
const more = nav.querySelector(".grouped");
const update = () => {
// Show all items for exact calculation
allItems.forEach((item) => {
item.classList.remove('d-none');
});
let avaliableWidth = nav.offsetWidth;
let stopWidth = more.offsetWidth;
let subitems = [];
dropdown.innerHTML = "";
navItems.forEach((item, i) => {
// Calculate if menu items are wider than navbar
if (avaliableWidth > stopWidth + item.offsetWidth) {
stopWidth += item.offsetWidth;
} else {
// Not enough space
let li = document.createElement("li");
li.innerHTML = item.innerHTML;
// Append overflowing menu items to dropdown
dropdown.appendChild(li);
// Hide items that won't fit in menu
item.classList.add('d-none');
// Count items in dropdown
subitems.push(i);
}
})
// Hide "More" item if it has no children
if (!subitems.length) {
more.classList.add('d-none');
}
}
update();
window.addEventListener("resize", update);
Я пытаюсь вычислить, есть ли в горизонтальном меню место для всех элементов меню, а если нет, то помещаю переполненные элементы в раскрывающийся список. Вот что у меня есть. Это работает - почти - потому что иногда рассчитывается неправильно. Попробуйте изменить размер окна — вы увидите что-то вроде этого: [img]https://i.sstatic.net/83GZmfTK.png [/img]
const update = () => { // Show all items for exact calculation allItems.forEach((item) => { item.classList.remove('d-none'); });
let avaliableWidth = nav.offsetWidth; let stopWidth = more.offsetWidth; let subitems = []; dropdown.innerHTML = "";
navItems.forEach((item, i) => { // Calculate if menu items are wider than navbar if (avaliableWidth > stopWidth + item.offsetWidth) { stopWidth += item.offsetWidth; } else { // Not enough space let li = document.createElement("li"); li.innerHTML = item.innerHTML; // Append overflowing menu items to dropdown dropdown.appendChild(li); // Hide items that won't fit in menu item.classList.add('d-none'); // Count items in dropdown subitems.push(i); } })
// Hide "More" item if it has no children if (!subitems.length) { more.classList.add('d-none'); } }
Я пытаюсь вычислить, есть ли в горизонтальном меню место для всех элементов меню, а если нет, то помещаю переполненные элементы в раскрывающийся список.
Вот что у меня есть. Это работает - почти - потому что иногда рассчитывается неправильно....
Я пытаюсь вычислить, есть ли в горизонтальном меню место для всех элементов меню, а если нет, то помещаю переполненные элементы в раскрывающийся список.
Вот что у меня есть. Это работает - почти - потому что иногда рассчитывается неправильно....
Я пытаюсь вычислить, есть ли в горизонтальном меню место для всех элементов меню, а если нет, то помещаю переполненные элементы в раскрывающийся список.
Вот что у меня есть. Это работает - почти - потому что иногда рассчитывается неправильно....
Я пытаюсь добавить всплывающие подсказки к элементам MenuBar, используя свойства инструмента, но это не сработало... Но с метками, кнопками и другими виджетами это работает вполне нормально. Может ли кто-нибудь мне помочь с этим?