Мало ли кому пригодится меню вертикальное у себя я разбил на две части.. переключая пользователь на то что нужно фиксирует то что открыто и даже перезагрузив браузер пишем все в cookies то есть запоминает последнюю позицию,
так же можно перетащить куда вам удобно его и позиция так же запомнится - используется drag and drop API (это базовый вариант - мой оформлен и добавлены спецэффекты , тут сами доделывайте, если что нужно спрашивайте доработаю под вас ), если не отрабатывают функции смотрите свои библиотеки.. ну , или пишите попробую помощь , мой проект делается весь в таком стиле даю возможность юзеру конфигурировать положение меню где ему удобно .. тут пример который можно адаптировать под себя, или использовать в табах
CSS
Display All
HTML
Display All
JS
Display All
так же можно перетащить куда вам удобно его и позиция так же запомнится - используется drag and drop API (это базовый вариант - мой оформлен и добавлены спецэффекты , тут сами доделывайте, если что нужно спрашивайте доработаю под вас ), если не отрабатывают функции смотрите свои библиотеки.. ну , или пишите попробую помощь , мой проект делается весь в таком стиле даю возможность юзеру конфигурировать положение меню где ему удобно .. тут пример который можно адаптировать под себя, или использовать в табах
CSS
Source Code
- .draggable {
- position: absolute;
- width: 2.5vw; /* 2vw + margin */
- background: #f0f0f0;
- border: 1px solid #ccc;
- cursor: move;
- z-index: 1000;
- user-select: none;
- }
- .switcher {
- text-align: center;
- font-size: 1.5vw;
- padding: 0.5vw 0;
- background: #ddd;
- cursor: pointer;
- }
- .menu {
- display: none;
- padding: 0.3vw;
- }
- .menu.active {
- display: flex;
- flex-direction: column;
- gap: 0.3vw;
- }
- .square {
- width: 2vw;
- height: 2vw;
- background: #bbb;
- }
HTML
Source Code
- <div id="menu-container" class="draggable">
- <div id="arrow" class="switcher">»</div>
- <div id="menu1" class="menu active">
- <!-- 9 квадратов -->
- <div class="square"></div><div class="square"></div><div class="square"></div>
- <div class="square"></div><div class="square"></div><div class="square"></div>
- <div class="square"></div><div class="square"></div><div class="square"></div>
- </div>
- <div id="menu2" class="menu">
- <!-- 9 квадратов -->
- <div class="square"></div><div class="square"></div><div class="square"></div>
- <div class="square"></div><div class="square"></div><div class="square"></div>
- <div class="square"></div><div class="square"></div><div class="square"></div>
- </div>
- </div>
JS
Source Code
- <script>
- }
- // --- Переключение меню ---
- function switchMenu() {
- const isActiveMenu1 = menu1.classList.contains('active');
- menu1.classList.toggle('active');
- menu2.classList.toggle('active');
- arrow.textContent = isActiveMenu1 ? '«' : '»';
- setCookie('activeMenu', isActiveMenu1 ? 'menu2' : 'menu1');
- }
- arrow.addEventListener('click', switchMenu);
- // --- Загрузка активного меню из cookie ---
- const savedMenu = getCookie('activeMenu');
- if (savedMenu === 'menu2') {
- menu1.classList.remove('active');
- menu2.classList.add('active');
- arrow.textContent = '«';
- }
- // --- Перетаскивание ---
- let isDragging = false;
- let offsetX, offsetY;
- menuContainer.addEventListener('mousedown', (e) => {
- isDragging = true;
- offsetX = e.clientX - menuContainer.offsetLeft;
- offsetY = e.clientY - menuContainer.offsetTop;
- menuContainer.style.zIndex = '1001';
- });
- document.addEventListener('mousemove', (e) => {
- if (isDragging) {
- const x = e.clientX - offsetX;
- const y = e.clientY - offsetY;
- menuContainer.style.left = `${x}px`;
- menuContainer.style.top = `${y}px`;
- }
- });
- document.addEventListener('mouseup', () => {
- isDragging = false;
- menuContainer.style.zIndex = '1000';
- // Сохраняем позицию в cookie
- setCookie('menuPosition', `${menuContainer.offsetLeft},${menuContainer.offsetTop}`);
- });
- // --- Восстановление позиции из cookie ---
- const savedPosition = getCookie('menuPosition');
- if (savedPosition) {
- const [left, top] = savedPosition.split(',').map(Number);
- menuContainer.style.left = `${left}px`;
- menuContainer.style.top = `${top}px`;
- } else {
- // По умолчанию в центре
- menuContainer.style.left = `${window.innerWidth / 2 - 100}px`;
- menuContainer.style.top = `${window.innerHeight / 2 - 100}px`;
- }
- });
- </script>
The post was edited 1 time, last by DenPUBG ().