Слайдеры карусели с компонентом Featured Tiles на мобильных устройствах?

Я хочу добавить карусельный слайдер на главную страницу моего сайта и на страницы категорий. Некоторые рекомендуемые темы и изображения можно выбирать и назначать через панель настроек.

Ранее я планировал реализовать следующий эффект как на настольных устройствах, так и на мобильных: :point_down:

Этот пример дает подсказку, но работа еще продолжается:

Поэтому я последовал совету @Moin и попробовал компонент Featured Tiles. Однако в нем отсутствует эффект карусели, и он не удобен для мобильных устройств. Я проделал некоторую работу, чтобы добиться этого: :point_down:

Настольные устройства

Мобильные устройства

Однако на мобильных устройствах есть две проблемы:

  1. При переходе на главную страницу со страницы темы эффект карусели не работает, пока я снова не нажму кнопку «Главная». Похоже, что JavaScript не загружается.

  2. Возникает ошибка Uncaught TypeError:

Вот используемый мной JavaScript: :point_down:

<script type="text/discourse-plugin" version="0.8.13">
window.onload = function() {

let slideshowInterval;

function initSlideshow() {
  const container = document.querySelector(".featured-tiles-container");
  const tiles = document.querySelectorAll(".featured-tile");
  const slideWidth = tiles[0].offsetWidth;
  let currentIndex = 0;
  let canSlide = true;

  function slideLeft() {
    if (canSlide) {
      canSlide = false;
      currentIndex = (currentIndex + 1) % tiles.length;
      const offset = -currentIndex * slideWidth;
      container.style.transition = "transform 0.5s ease-in-out";
      container.style.transform = `translateX(${offset}px)`;

      setTimeout(() => {
        canSlide = true;
        container.style.transition = "none";
      }, 500);
    }
  }

  function startSlideshow() {
    slideLeft();
    slideshowInterval = setInterval(slideLeft, 3000);
  }

  startSlideshow();
}

function destroySlideshow() {
  clearInterval(slideshowInterval);
}

api.onPageChange((url) => {
  destroySlideshow();
  if (url === "/" || url.indexOf("/c/") === 0) {
    initSlideshow();
  }
});

}
</script>

@Arkshine @Lilly, есть ли какие-либо решения или идеи?

Привет, @Dennis_P_Z :wave:

Думаю, вы сможете добиться желаемого с помощью этого компонента:

Спасибо, но это другое.

В ссылке указано, что работа продолжается.

Возможно, один из этих компонентов является альтернативой. Вы можете разместить темы в верхней части, но карусели нет.

Привет, @Moin, спасибо за совет. Попробую, получится ли у меня реализовать карусель :wink:

Только что протестировал из любопытства. Компонент работает отлично.
Нужно как минимум 2 изображения, и по какой-то причине оно ограничено маршрутом /categories. :slight_smile:

chrome_LYxltGVnmc
.

Ха, здорово! :ok_hand: Я не проверял. Я просто предположил на основе сообщения автора и того, что там было указано «в процессе разработки», а в репозитории Git не было информации на тему мета-данных, что это не работает. :woman_shrugging:t2:

К тому же, классный компонент. :slight_smile:

@Moin Я пробовал с использованием «Избранных файлов», в итоге удалось реализовать карусель с помощью пользовательских CSS и JavaScript, но для корректного отображения на мобильных устройствах нужно добавить ещё немного CSS :joy:

mmexport1697920795005

:+1:
Не забудьте поделиться своим #theme-component в конце

Привет @Arkshine
Мне нужна эта функция на главной странице и на страницах категорий, а ещё лучше, если изображение можно будет вызывать внутри темы. Мы дадим автору больше времени :yum:

Я обновил свою исходную тему, пожалуйста, посмотрите, и если у вас есть идеи
Спасибо!
@Lilly @Moin

Обрезка выглядит довольно плохо :frowning: Где глаза щенка?! :cry:

В идеале следует сохранять соотношение сторон.

Рекомендую сохранить высоту и центрировать изображение по горизонтали.

Верно, на маленьких экранах всегда стоит вопрос выбора, но искажённые изображения — это недопустимо :rofl:

Если вы всё ещё хотите попробовать этот компонент, я сделал форк, добавив настройку show_on, где можно выбрать место для его отображения.

URL: https://github.com/Arkshine/discourse-big-carousel-component
Имя ветки: feature/new_settings

(Я не знаю, какой сейчас статус у оригинального компонента. Надеюсь, что форкнуть его нормально :pray:, и не уверен, стоит ли предлагать им эти изменения).

Спасибо. Честно говоря, это было бы очень полезно для компонента и его пользователей.

Привет! Отличная работа :+1:
Вчера я установил этот компонент темы, всё работает хорошо, за исключением:

  1. При прокрутке карусели в какой-то момент изображение разделяется на две части, но это происходит не всегда. Вот пример:

  2. После нажатия на кнопку в карусели я перехожу по ссылке на другую страницу, а затем возвращаюсь на главную. При этом размер контента в баннере уменьшается. Это не постоянная ошибка и может возникнуть в любой момент. Вот пример ошибки:

Для справки: на компьютере я использовал браузер Chrome, а на смартфоне Android — браузер Huawei.

Конечно, я понимаю, что этот компонент всё ещё находится в разработке, но всё же решил поделиться этой информацией с вами.

По умолчанию изображение повторяется в зависимости от доступного пространства. Вы можете изменить это поведение с помощью CSS. Я добавлю настройку для управления изображением, например, его позицией, размером и т. д.

На данный момент вы можете поэкспериментировать со свойствами: background. (Требуется !important)

.custom-big-carousel-slide {
    background-repeat: no-repeat !important;
}
  1. Мне не удалось воспроизвести эту проблему. :thinking: Однако один раз я видел ошибку в консоли (сейчас её не вижу); возможно, она связана с этим. Разберёмся!

Привет! :raising_hand_man:
Спасибо за совет :raised_hands:, я попробую вашу версию CSS, надеюсь, она поможет :slightly_smiling_face:

Снова здравствуйте :wave:
Я поэкспериментировал с CSS и мне понравилась возможность контролировать фон изображения в карусели :ok_hand:. Я также надеялся, что CSS решит мою первоначальную проблему. В обычном состоянии изображения в карусели меняются без проблем, но как только я нажимаю на одну из кнопок latest, new или active, при смене изображений и контента в карусели нарушается их целостность — начало появляется в конце, а конец — в начале. Похоже, это системная ошибка :pensive:

Спасибо за обратную связь, я попробую это сделать позже. :+1: