Все книги представлены в электронном формате.
Печатная версия обсуждается индивидуально — стоимость и сроки зависят от тиража.

Связь с админом

Остались вопросы? Напишите в Telegram —
поможем с выбором

Написать в Telegram
' + hl.text + ''; } highlightsEl.innerHTML = hHtml; priceEl.textContent = b.price; priceNoteEl.textContent = b.priceNote; buyBtn.href = '#order:' + b.order; } function showBook(index) { currentIndex = index; var b = (currentIndex === -1) ? featuredBook : books[currentIndex]; featured.classList.add('jrc-featured--fading'); setTimeout(function() { applyBook(b); for (var t = 0; t < items.length; t++) { items[t].classList.toggle('jrc-carousel__item--active', t === currentIndex); } featured.classList.remove('jrc-featured--fading'); }, 320); } function scrollToFeatured() { if (featured) featured.scrollIntoView({ behavior: 'smooth', block: 'start' }); } for (var i = 0; i < items.length; i++) { (function(idx) { items[idx].addEventListener('click', function() { showBook(idx); scrollToFeatured(); }); })(i); } prevBtn.addEventListener('click', function() { var idx = currentIndex - 1; if (idx < 0) idx = books.length - 1; showBook(idx); scrollToFeatured(); }); nextBtn.addEventListener('click', function() { var idx = currentIndex + 1; if (idx >= books.length) idx = 0; showBook(idx); scrollToFeatured(); }); var scrollIndex = 0; function getVisibleCount() { var w = window.innerWidth; if (w <= 640) return 1; if (w <= 960) return 2; if (w <= 1100) return 3; return 4; } function getMaxScrollIndex() { return Math.max(0, items.length - getVisibleCount()); } function buildDots() { dotsWrap.innerHTML = ''; var maxIdx = getMaxScrollIndex(); for (var d = 0; d <= maxIdx; d++) { var dot = document.createElement('button'); dot.className = 'jrc-carousel__dot' + (d === scrollIndex ? ' jrc-carousel__dot--active' : ''); dot.setAttribute('aria-label', 'Позиция ' + (d + 1)); dot.dataset.index = d; dot.addEventListener('click', function() { scrollIndex = parseInt(this.dataset.index); updateCarouselScroll(); }); dotsWrap.appendChild(dot); } } function updateCarouselScroll() { var maxIdx = getMaxScrollIndex(); if (scrollIndex > maxIdx) scrollIndex = maxIdx; var gap = 24; var itemWidth = items[0].getBoundingClientRect().width + gap; var offset = scrollIndex * itemWidth; track.style.transform = 'translateX(-' + offset + 'px)'; prevBtn.classList.toggle('jrc-carousel__arrow--disabled', scrollIndex === 0); nextBtn.classList.toggle('jrc-carousel__arrow--disabled', scrollIndex >= maxIdx); var dots = dotsWrap.querySelectorAll('.jrc-carousel__dot'); for (var d = 0; d < dots.length; d++) { dots[d].classList.toggle('jrc-carousel__dot--active', d === scrollIndex); } } var touchStartX = 0, touchDelta = 0, isSwiping = false; track.addEventListener('touchstart', function(e) { touchStartX = e.touches[0].clientX; isSwiping = true; track.style.transition = 'none'; }, { passive: true }); track.addEventListener('touchmove', function(e) { if (!isSwiping) return; touchDelta = e.touches[0].clientX - touchStartX; }, { passive: true }); track.addEventListener('touchend', function() { if (!isSwiping) return; isSwiping = false; track.style.transition = ''; if (Math.abs(touchDelta) > 50) { if (touchDelta < 0 && scrollIndex < getMaxScrollIndex()) scrollIndex++; else if (touchDelta > 0 && scrollIndex > 0) scrollIndex--; } touchDelta = 0; updateCarouselScroll(); }); var resizeTimer; window.addEventListener('resize', function() { clearTimeout(resizeTimer); resizeTimer = setTimeout(function() { buildDots(); updateCarouselScroll(); }, 150); }); buildDots(); updateCarouselScroll(); })();
Made on
Tilda