Игровые новости / BeamNG.drive
Разбор патча BeamNG.drive 0.39: новая аэродинамика, купе Cherrier Ardente и ралли NGRC Utah 2026. Технические детали, изменения графики и влияние на…
Игровые новости / Le Mans Ultimate
Вышло крупное обновление Le Mans Ultimate v1.4 и DLC US Track Pack. Новая физика шин Michelin, трассы Laguna Seca и Daytona, бесплатные гиперкары…
Игровые новости / NASCAR 26
NASCAR 26 выйдет 18 сентября 2026. Разбор механик: динамическая трасса, AI DNFs, телеметрия, новая трасса Coronado. Технические детали симулятора от…
Теория и практика
Сравнение силы обратной связи (FFB) в топовых автосимуляторах: Assetto Corsa, AMS2, rFactor 2 , iRacing , ACC, а также раллийные RBR, DiRT Rally 2.0 ,…
Публикации / Le Mans Ultimate
Что ждёт Le Mans Ultimate в 2026–2027 годах: новые гиперкары Ford и McLaren, шесть американских трасс, долгожданный режим карьеры, консольные версии…
Игровые новости / Assetto Corsa Evo
Обзор обновления Assetto Corsa EVO V0.8: KTM X-Bow GT2/GT4, VW Golf R, трасса Kyalami, улучшенный VR с фовеативным рендерингом и кастомные ливреи в…
Игровые новости / Assetto Corsa Evo
Kyalami официально появится в Assetto Corsa EVO версии 0.8. История легендарной трассы, дата выхода обновления и что ещё стоит ждать — читайте в…
Игровые новости / Le Mans Ultimate
Le Mans Ultimate получит американский трековый пропуск с шестью автодромами. Первые — Daytona и Laguna Seca. Даты выхода, цена и список оставшихся…
Игровые новости / Motorsport Manager 2
Playsport Games подтвердила разработку Motorsport Manager 2. Игра выйдет на ПК (Steam) в 2027 году. Узнайте о нововведениях: GT-гонки, выносливость,…
Игровые новости / Assetto Corsa Rally
Assetto Corsa Rally версия 0.5 добавляет онлайн-мультиплеер, две гравийные трассы в Греции (22 км) и переработанную физику. Дата выхода — 29 июня…
Игровые новости / Le Mans Ultimate
В Le Mans Ultimate вышло бесплатное обновление V1.3.3. Добавлены Toyota TR010, BMW M Hybrid V8 Evo, три обновлённые версии GT3 (Ford, Ferrari,…
Игровые новости / Assetto Corsa Evo
Assetto Corsa EVO версии 0.7: открыт моддинг автомобилей, доступен SDK. Новая система частиц, рейтинг безопасности за опасные сближения в…
${platformName}
${video.title}
${categoryName}
`;
// Динамически загружаем превью
getVideoThumbnail(video, (thumbnailUrl) => {
const thumbnailContainer = videoCard.querySelector('.video-thumbnail');
thumbnailContainer.innerHTML = `
${platformName}
`;
});
videoCard.addEventListener('click', (e) => {
if (!e.target.closest('.clickable-category')) {
openVideoInModal(video);
}
});
return videoCard;
}
// Рендеринг порции видео
function renderVideosChunk(videos) {
currentVideos = videos;
currentIndex = Math.min(videos.length, currentIndex + videosPerPage);
const chunk = videos.slice(0, currentIndex);
videoGallery.innerHTML = "";
if (videos.length === 0) {
videoGallery.innerHTML = "
Нет видео для отображения.
";
return;
}
chunk.forEach(video => {
const videoCard = createVideoCard(video);
videoGallery.appendChild(videoCard);
});
}
// Рендеринг кнопки "Показать ещё"
function renderLoadMoreButton(filteredVideos) {
const loadMoreContainer = document.getElementById("load-more-container");
if (loadMoreContainer) loadMoreContainer.remove();
if (currentIndex >= filteredVideos.length) return;
const container = document.createElement("div");
container.id = "load-more-container";
container.style.textAlign = "center";
container.style.marginTop = "20px";
const button = document.createElement("button");
button.textContent = "Показать ещё";
button.style.padding = "10px 20px";
button.style.fontSize = "16px";
button.addEventListener("click", () => {
renderVideosChunk(filteredVideos);
renderLoadMoreButton(filteredVideos);
});
container.appendChild(button);
videoGallery.parentElement.appendChild(container);
}
// Рендеринг кнопок фильтрации
function renderFilterButtons(categoriesList) {
filterButtonsContainer.innerHTML = "";
const allButton = document.createElement("button");
allButton.textContent = "Все";
allButton.dataset.categoryId = "all";
allButton.classList.add("active");
allButton.addEventListener("click", () => {
document.querySelectorAll(".filter-buttons button").forEach(btn => btn.classList.remove("active"));
allButton.classList.add("active");
const filteredVideos = filterVideos('all');
currentIndex = 0;
renderVideosChunk(filteredVideos);
renderLoadMoreButton(filteredVideos);
});
filterButtonsContainer.appendChild(allButton);
categoriesList.forEach(category => {
if (category.id === 'all') return;
const button = document.createElement("button");
button.textContent = category.name;
button.dataset.categoryId = category.id;
button.addEventListener("click", () => {
document.querySelectorAll(".filter-buttons button").forEach(btn => btn.classList.remove("active"));
button.classList.add("active");
const filteredVideos = filterVideos(category.id);
currentIndex = 0;
renderVideosChunk(filteredVideos);
renderLoadMoreButton(filteredVideos);
});
filterButtonsContainer.appendChild(button);
});
}
// Обработчик клика по категории
document.addEventListener('click', (e) => {
if (e.target.classList.contains('clickable-category')) {
e.preventDefault();
e.stopPropagation();
const categoryId = e.target.dataset.categoryId;
const button = document.querySelector(`.filter-buttons button[data-category-id="${categoryId}"]`);
if (button) button.click();
}
});
// Инициализация
renderFilterButtons(categories);
const initialVideos = filterVideos('all');
renderVideosChunk(initialVideos);
renderLoadMoreButton(initialVideos);
Back to top button
Template not found: /templates/iracers-26/tpls/pop-up.tpl