Igor150195

banner

Dec 8th, 2025 (edited)
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <script>
  2.  
  3. function distributeBanners(container) {
  4.     if (!container || container.dataset.bannersProcessed) return;
  5.  
  6.     const content = container.querySelector('.article-content');
  7.     if (!content) return;
  8.  
  9.     const banners = Array.from(container.querySelectorAll('.banner-card-content'));
  10.     if (!banners.length) return;
  11.  
  12.     const h2s = Array.from(content.querySelectorAll('h2'));
  13.     let bannerIndex = 0;
  14.  
  15.     // Вставка перед каждым вторым h2
  16.     h2s.forEach((h2, i) => {
  17.         if (bannerIndex >= banners.length) return;
  18.         if ((i + 1) % 2 === 0) {
  19.             h2.before(banners[bannerIndex++]);
  20.         }
  21.     });
  22.  
  23.     // Остатки — вниз
  24.     if (bannerIndex < banners.length) {
  25.         banners.slice(bannerIndex).forEach(b => content.appendChild(b));
  26.     }
  27.  
  28.     // Чтобы не обработать снова
  29.     container.dataset.bannersProcessed = '1';
  30. }
  31.  
  32.  
  33. // =====================
  34. // 1. Первичный запуск
  35. // =====================
  36. document.addEventListener('DOMContentLoaded', () => {
  37.     document.querySelectorAll('.article-wrapper')
  38.         .forEach(wrap => distributeBanners(wrap));
  39. });
  40.  
  41.  
  42. // =====================
  43. // 2. Авто-отслеживание lazyload
  44. // =====================
  45. const observer = new MutationObserver(mutations => {
  46.     for (const m of mutations) {
  47.         m.addedNodes.forEach(node => {
  48.             // ищем новые .article-wrapper
  49.             if (node.nodeType === 1) {
  50.  
  51.                 if (node.matches('.article-wrapper')) {
  52.                     distributeBanners(node);
  53.                 }
  54.  
  55.                 // или если wrap вложен внутрь нескольких нод
  56.                 const innerWraps = node.querySelectorAll?.('.article-wrapper');
  57.                 innerWraps?.forEach(wrap => distributeBanners(wrap));
  58.             }
  59.         });
  60.     }
  61. });
  62.  
  63. // Наблюдаем за body — 100% поймает любые вставки
  64. observer.observe(document.body, {
  65.     childList: true,
  66.     subtree: true
  67. });
  68.  
  69. </script>
Advertisement
Add Comment
Please, Sign In to add comment