меню с табом + перемещение меню

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • меню с табом + перемещение меню

      Мало ли кому пригодится меню вертикальное у себя я разбил на две части.. переключая пользователь на то что нужно фиксирует то что открыто и даже перезагрузив браузер пишем все в cookies то есть запоминает последнюю позицию,
      так же можно перетащить куда вам удобно его и позиция так же запомнится - используется drag and drop API (это базовый вариант - мой оформлен и добавлены спецэффекты , тут сами доделывайте, если что нужно спрашивайте доработаю под вас ), если не отрабатывают функции смотрите свои библиотеки.. ну , или пишите попробую помощь , мой проект делается весь в таком стиле даю возможность юзеру конфигурировать положение меню где ему удобно .. тут пример который можно адаптировать под себя, или использовать в табах

      CSS

      Source Code

      1. .draggable {
      2. position: absolute;
      3. width: 2.5vw; /* 2vw + margin */
      4. background: #f0f0f0;
      5. border: 1px solid #ccc;
      6. cursor: move;
      7. z-index: 1000;
      8. user-select: none;
      9. }
      10. .switcher {
      11. text-align: center;
      12. font-size: 1.5vw;
      13. padding: 0.5vw 0;
      14. background: #ddd;
      15. cursor: pointer;
      16. }
      17. .menu {
      18. display: none;
      19. padding: 0.3vw;
      20. }
      21. .menu.active {
      22. display: flex;
      23. flex-direction: column;
      24. gap: 0.3vw;
      25. }
      26. .square {
      27. width: 2vw;
      28. height: 2vw;
      29. background: #bbb;
      30. }
      Display All


      HTML

      Source Code

      1. <div id="menu-container" class="draggable">
      2. <div id="arrow" class="switcher">»</div>
      3. <div id="menu1" class="menu active">
      4. <!-- 9 квадратов -->
      5. <div class="square"></div><div class="square"></div><div class="square"></div>
      6. <div class="square"></div><div class="square"></div><div class="square"></div>
      7. <div class="square"></div><div class="square"></div><div class="square"></div>
      8. </div>
      9. <div id="menu2" class="menu">
      10. <!-- 9 квадратов -->
      11. <div class="square"></div><div class="square"></div><div class="square"></div>
      12. <div class="square"></div><div class="square"></div><div class="square"></div>
      13. <div class="square"></div><div class="square"></div><div class="square"></div>
      14. </div>
      15. </div>
      Display All

      JS

      Source Code

      1. <script>
      2. }
      3. // --- Переключение меню ---
      4. function switchMenu() {
      5. const isActiveMenu1 = menu1.classList.contains('active');
      6. menu1.classList.toggle('active');
      7. menu2.classList.toggle('active');
      8. arrow.textContent = isActiveMenu1 ? '«' : '»';
      9. setCookie('activeMenu', isActiveMenu1 ? 'menu2' : 'menu1');
      10. }
      11. arrow.addEventListener('click', switchMenu);
      12. // --- Загрузка активного меню из cookie ---
      13. const savedMenu = getCookie('activeMenu');
      14. if (savedMenu === 'menu2') {
      15. menu1.classList.remove('active');
      16. menu2.classList.add('active');
      17. arrow.textContent = '«';
      18. }
      19. // --- Перетаскивание ---
      20. let isDragging = false;
      21. let offsetX, offsetY;
      22. menuContainer.addEventListener('mousedown', (e) => {
      23. isDragging = true;
      24. offsetX = e.clientX - menuContainer.offsetLeft;
      25. offsetY = e.clientY - menuContainer.offsetTop;
      26. menuContainer.style.zIndex = '1001';
      27. });
      28. document.addEventListener('mousemove', (e) => {
      29. if (isDragging) {
      30. const x = e.clientX - offsetX;
      31. const y = e.clientY - offsetY;
      32. menuContainer.style.left = `${x}px`;
      33. menuContainer.style.top = `${y}px`;
      34. }
      35. });
      36. document.addEventListener('mouseup', () => {
      37. isDragging = false;
      38. menuContainer.style.zIndex = '1000';
      39. // Сохраняем позицию в cookie
      40. setCookie('menuPosition', `${menuContainer.offsetLeft},${menuContainer.offsetTop}`);
      41. });
      42. // --- Восстановление позиции из cookie ---
      43. const savedPosition = getCookie('menuPosition');
      44. if (savedPosition) {
      45. const [left, top] = savedPosition.split(',').map(Number);
      46. menuContainer.style.left = `${left}px`;
      47. menuContainer.style.top = `${top}px`;
      48. } else {
      49. // По умолчанию в центре
      50. menuContainer.style.left = `${window.innerWidth / 2 - 100}px`;
      51. menuContainer.style.top = `${window.innerHeight / 2 - 100}px`;
      52. }
      53. });
      54. </script>
      Display All

      The post was edited 1 time, last by DenPUBG ().