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
*/