Кто из вас сталкивался с ошибкой инициализации swiper?

Кто из вас сталкивался с аналогичной проблемой? 

У меня есть проект на WordPress, на страницах которого размещено несколько слайдеров Swiper. На днях я обнаружил, что Swiper не инициализируется на мобильных устройствах и в консоли появляется следующая ошибка: 

<i>Uncaught TypeError: Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'.</i>

При этом на десктопной версии страницы работают корректно — ошибки не возникает, все инициализируется. Хочу отметить, что на мобильных устройствах ранее все функционировало нормально, и код не изменялся.

Заглянул в инспектор — при инициализации на мобильных устройствах класс "swiper-wrapper" удаляется. В коде присутствует <div class="swiper-wrapper">, но на мобильной версии этот div преобразуется в <code class="html">&lt;div class&gt;&lt;/div&gt;</code>. Причем удаление класса происходит на разрешении до 716 пикселей, далее все работает как следует — класс не удаляется и Swiper инициализируется. Следовательно, на мобильных устройствах нарушается структура Swiper, и он не может правильно инициализироваться.

Пока что я не замечал подобной проблемы в Symfony, но связываю это с недавним обновлением 11 версии Swiper, которое вышло 14 февраля. Возможно, я не первый, кто столкнулся с этой ошибкой? Буду благодарен за любые рекомендации по ее устранению.
  • 25 февраля 2025 г. 5:44
Ответы на вопрос 1
Проблема, с которой вы столкнулись, действительно может быть связана с особенностями работы Swiper на мобильных устройствах и рендерингом элементов на экране. Вот несколько шагов, которые могут помочь вам устранить ошибку:

1. **Проверьте версию Swiper**: Если вы обновили Swiper до последней версии, возможно, в новых обновлениях были внесены изменения, касающиеся мобильной версии. Проверьте документацию на предмет изменений, связанных с инициализацией на мобильных устройствах. Если ничего не помогает, вы можете попытаться временно вернуться к предыдущей стабильной версии.

2. **Инициализация Swiper**: Убедитесь, что вы вызываете инициализацию Swiper после полной загрузки всех элементов страницы. Используйте событие `DOMContentLoaded` или проверьте, чтобы инициализация выполнялась после того, как все DOM-элементы загружены и видимы.

   ```javascript
   document.addEventListener('DOMContentLoaded', function() {
       const swiper = new Swiper('.swiper-container', {
           // параметры swiper
       });
   });
   ```

3. **Проверка разметки**: Убедитесь, что разметка, связанная с Swiper (например, `swiper-container`, `swiper-wrapper`, `swiper-slide`), корректна и присутствует в HTML-коде на момент инициализации Swiper. Возможно, что на мобильных устройствах разметка каким-то образом изменяется или удаляется.

4. **CSS и медиа-запросы**: Проверьте, нет ли у вас CSS-правил, которые могут скрывать или изменять элементы Swiper на мобильных устройствах (например, через `display: none`, `visibility: hidden` и т.д.) в медиа-запросах. Это также может привести к ошибкам инициализации.

5. **Дебаггинг**: Попробуйте добавить дополнительный консольный вывод для отслеживания состояния при инициализации Swiper, чтобы увидеть, на каком этапе возникает проблема.

   ```javascript
   console.log(document.querySelector('.swiper-wrapper'));
   ```

6. **Убедитесь, что элемент существует**: Перед инициализацией Swiper проверьте, что элемент существует и является `Element`. Например:

   ```javascript
   const wrapper = document.querySelector('.swiper-wrapper');
   if (wrapper) {
       const swiper = new Swiper('.swiper-container', {
           // параметры swiper
       });
   } else {
       console.error('Element .swiper-wrapper not found.');
   }
   ```

Если после проверки всех этих пунктов проблема остается, стоит поискать аналогичные случаи на форумах разработчиков или обратиться за помощью к сообществу Swiper. Возможно, кроме вас, кто-то уже сталкивался с этой проблемой после обновления библиотеки.
Похожие вопросы