ДА
Исправление автоподгрузки товаров: точечный скрипт под конкретный #rec
*#rec1961445111* (каталог с автоподгрузкой)
10.07.2026 08:19
13.07.2026 10:56
1.1
баг
баг
баг
баг
баг
на тесте
на тесте
на тесте
Проблема:
Скрипт работал в глобальном контексте (на уровне *document.body*) и использовал селектор по классу *.t-store__load-more-btn* без пространственной привязки. Из‑за этого логика автоподгрузки срабатывала на всех экземплярах кнопки на странице — в том числе в каталоге, где автоподгрузка не требовалась.
Это вызывало каскадные побочные эффекты:
  • Ложные срабатывания: *MutationObserver* фиксировал появление кнопки в «тихом» каталоге и инициировал клик, запуская лишнюю подгрузку.
  • Конфликты состояний: при одновременной работе двух каталогов возникали гонки состояний (race conditions) — запросы уходили параллельно, а ответы могли накладываться друг на друга, из‑за чего часть товаров не отображалась или дублировалась.
  • Избыточные запросы к API Tilda: каждая страница делала больше запросов, чем нужно, что увеличивало нагрузку и могло приводить к лимитам.
  • Некорректная работа адаптивной логики: поскольку скрипт не знал, к какому именно блоку относится кнопка, любые доработки (например, кастомные лоадеры или счётчики) применялись ко всем блокам сразу и ломали верстку в неподходящих местах.
  • В итоге второй каталог фактически терял предсказуемое поведение: автоподгрузка работала там, где её быть не должно, и ломала задуманный UX.
LET'S GO!
Решение:
Выполнена локализация контекста выполнения скрипта через привязку к конкретному DOM‑узлу по ID блока *#rec1961445111*. Теперь вся логика (поиск кнопки, *IntersectionObserver*, *MutationObserver*) ограничена областью видимости целевого контейнера.
Ключевые изменения архитектуры:
  • Изоляция области действия: вместо *document.querySelectorAll('.t-store__load-more-btn')* используется *container.querySelectorAll(...)*, где container — строго заданный блок. Это гарантирует, что скрипт «не видит» кнопки вне этого блока.
  • Точечная подписка на изменения: *MutationObserver* теперь наблюдает только за поддеревом целевого блока (mo.observe(container, { childList: true, subtree: true })), а не за всем document.body. Это исключает ложные срабатывания в соседних каталогах.
  • Защита от дублирования наблюдателей: добавлена проверка *if (button._observerAttached)* return, чтобы при повторной инициализации (например, после динамической подгрузки) не создавались лишние экземпляры *IntersectionObserver*.
  • Сохранение совместимости с нативной логикой Tilda: кнопка остаётся в DOM (скрыта только через *opacity: 0*), чтобы нативный механизм автоподгрузки Tilda мог корректно обрабатывать клики и запросы.
  • В результате автоподгрузка теперь работает строго в одном каталоге, не затрагивая второй, а общая стабильность страницы повышается за счёт сокращения лишних операций и устранения конфликтов состояний.
Комментарий разработчика: Глобальный скрипт: скрывал и кликал по всем кнопкам «Загрузить ещё» на странице. Ломает каталоги, где автоподгрузка не нужна. Не использовать. Заменён на точечную версию по ID блока.
Made on
Tilda