const MENU_CONFIG = { // Основная страница каталога catalogMainUrl: '/catalog/', // Ключ - ключевые слова для поиска в тексте пункта меню (в нижнем регистре) // Значение - URL для перехода submenuItems: { 'кинопроекционное': '/catalog/kinoproekt/', 'звуковое': '/catalog/sound-equipment/', 'вспомогательное': '/catalog/supporting-equipment/', 'интерьерные': '/catalog/interior-solutions/' }, catalogKeywords: ['каталог', 'catalog'], // Селекторы для поиска элементов меню каталога catalogSelectors: [ 'a[href="#submenu:details"]', '.t-menu__link-item[href="#submenu:details"]', '[data-tooltip="details"]', '.t-menu__link-item:contains("Каталог")', '.t-menu__link-item:contains("каталог")', '.t-menusub__target-link[href="#submenu:details"]' ], // Минимальная ширина экрана для работы скрипта (в пикселях) minScreenWidth: 1200 }; // Функция проверки ширины экрана function isDesktopScreen() { return window.innerWidth >= MENU_CONFIG.minScreenWidth; } // Скрипт для добавления кликабельности к меню каталога // Основная функция для настройки кликабельности меню function makeMenuClickable() { // Проверяем ширину экрана - работаем только на экранах шире 1200px if (!isDesktopScreen()) { return; } let catalogElement = null; // Попытка найти элемент каталога по селекторам for (let selector of MENU_CONFIG.catalogSelectors) { catalogElement = $(selector).first(); if (catalogElement.length > 0) { break; } } // Если не найден по селекторам, ищем по ключевым словам if (!catalogElement || catalogElement.length === 0) { for (let keyword of MENU_CONFIG.catalogKeywords) { catalogElement = $('.t-menu__link-item').filter(function() { return $(this).text().toLowerCase().includes(keyword); }).first(); if (catalogElement.length > 0) { break; } } } if (catalogElement && catalogElement.length > 0) { // Добавляем обработчик клика catalogElement.off('click.catalog').on('click.catalog', function(e) { if ($(e.target).closest('.t-menusub').length === 0) { e.preventDefault(); e.stopPropagation(); window.location.href = MENU_CONFIG.catalogMainUrl; } }); catalogElement.off('mouseenter.catalog').on('mouseenter.catalog', function() { }); } else { setTimeout(makeMenuClickable, 1000); } // Обработка подпунктов меню const submenuItems = MENU_CONFIG.submenuItems; // Добавляем ссылки к подпунктам Object.keys(submenuItems).forEach(function(keyword) { const submenuLink = $('.t-menusub__link-item, .t-menu__link-item').filter(function() { return $(this).text().toLowerCase().includes(keyword); }).first(); if (submenuLink.length > 0) { submenuLink.off('click.submenu').on('click.submenu', function(e) { e.preventDefault(); window.location.href = submenuItems[keyword]; }); } }); } function forceMenuClickable() { if (!isDesktopScreen()) { return; } const menuElements = $('a, .t-menu__link-item, .t-menusub__target-link').filter(function() { const text = $(this).text().toLowerCase(); const href = $(this).attr('href') || ''; return text.includes('каталог') || href.includes('submenu:details'); }); menuElements.each(function() { const $this = $(this); const text = $this.text().toLowerCase(); if (text.includes('каталог') && !text.includes('кинопроекц') && !text.includes('звуковое')) { $this.attr('data-original-href', $this.attr('href')); $this.off('click.force').on('click.force', function(e) { const target = $(e.target); if (!target.closest('.t-menusub, .t-menu__submenu').length) { e.preventDefault(); e.stopImmediatePropagation(); window.location.href = MENU_CONFIG.catalogMainUrl; return false; } }); } }); } // ======================================== // МОБИЛЬНОЕ МЕНЮ - прямые ссылки без dropdown // ======================================== function makeMobileMenuClickable() { if (isDesktopScreen()) return; const submenuItems = MENU_CONFIG.submenuItems; // Делаем "Каталог" кликабельным $('a, .t-menu__link-item').filter(function() { const text = $(this).text().toLowerCase().trim(); return text.includes('каталог') && !text.includes('кинопроекц'); }).each(function() { const $el = $(this); if ($el.data('mobile-set')) return; $el.data('mobile-set', true); // Убираем стандартные обработчики Tilda $el.off('click touchstart touchend'); $el[0].onclick = null; $el.on('click.mobile', function(e) { e.preventDefault(); e.stopImmediatePropagation(); window.location.href = MENU_CONFIG.catalogMainUrl; }); }); // Делаем подпункты кликабельными Object.keys(submenuItems).forEach(function(keyword) { $('a, .t-menu__link-item, .t-menusub__link-item').filter(function() { return $(this).text().toLowerCase().trim().includes(keyword); }).each(function() { const $el = $(this); if ($el.data('mobile-sub-set')) return; $el.data('mobile-sub-set', true); $el.off('click touchstart touchend'); $el[0].onclick = null; $el.on('click.mobile', function(e) { e.preventDefault(); e.stopImmediatePropagation(); window.location.href = submenuItems[keyword]; }); }); }); } // Инициализация скрипта $(document).ready(function() { if (isDesktopScreen()) { // Десктоп makeMenuClickable(); setTimeout(forceMenuClickable, 500); setTimeout(forceMenuClickable, 1500); setTimeout(forceMenuClickable, 3000); } else { // Мобильные - прямые ссылки makeMobileMenuClickable(); setTimeout(makeMobileMenuClickable, 500); setTimeout(makeMobileMenuClickable, 1000); } $(window).on('load', function() { if (isDesktopScreen()) { setTimeout(makeMenuClickable, 500); } else { setTimeout(makeMobileMenuClickable, 300); } }); }); // Обработчик изменения размера окна $(window).on('resize', function() { if (isDesktopScreen()) { setTimeout(function() { makeMenuClickable(); forceMenuClickable(); }, 300); } else { $('.t-menu__link-item, .t-menusub__target-link, a').off('.catalog .submenu .force'); } }); // ======================================== // ИНСТРУКЦИИ ПО ИСПОЛЬЗОВАНИЮ // ======================================== /* КАК ИЗМЕНИТЬ ССЫЛКИ: 1. Чтобы изменить ссылку на главную страницу каталога: Измените значение catalogMainUrl в объекте MENU_CONFIG 2. Чтобы добавить/изменить ссылки подменю: Добавьте или измените записи в объекте submenuItems 3. Пример добавления нового пункта меню: 'новый пункт': '/catalog/new-section/' 4. Ключевые слова ищутся в тексте пункта меню (регистр не важен) НАСТРОЙКА ШИРИНЫ ЭКРАНА: 5. Чтобы изменить минимальную ширину экрана для работы скрипта: Измените значение minScreenWidth в объекте MENU_CONFIG 6. По умолчанию скрипт работает только на экранах шире 1200px */