javascript — бесконечная карусель цикла контента

\$\начало группы\$

Я сделал этот довольно простой компонент цикла карусели контента, но код кажется слишком «Iffy» , но я не уверен, как я мог бы сделать его лучше.

Я пытался использовать выражение Switch, что делает его немного более читаемым, но Я не люблю в них разрывы.

вот соответствующий код js:

 data() {
    возвращаться {
      ...
      текущийContentId: 0,
      содержание: [
        {id: 0, title: "title1", body: "description1" },
        {id: 1, title: "title2", body: "description2" },
        {id: 2, title: "title3", body: "description3" }
        
      ]
    };
  },
методы: {
    навигация (е) {
      
      пусть loopLength = this.content.length - 1;
      
      если (e.target.parentElement.id === "nav__back") {
        если (this.currentContentId == 0) {
          this.currentContentId = длина цикла
        } еще {
          this.currentContentId--
        }
        
      } еще {
        если (this.
currentContentId == loopLength) { this.currentContentId = this.currentContentId — длина цикла } еще { this.currentContentId++ } } }

HTML:

 
arrow_back_ios <дел>

{{ content[currentContentId].title }}

<дел>

{{ content[currentContentId].body }}

arrow_forward_ios

вот моя ссылка на codepen (там также переключатель тем, не обращайте на это внимания)

  • javascript
  • vue.js
\$\конечная группа\$

1

\$\начало группы\$

  • Ваш код ломается, когда ваши идентификаторы не следуют друг за другом. Я бы тогда не назвал их id , а может индекс а если индекс, то зачем вообще их иметь в структуре данных (это подразумевается позицией в массиве)?
  • Это 0 как магическое число первых id меня тоже смущает. Было бы намного лучше инициализировать этот идентификатор на основе содержимого [0].id
  • .
  • Ваш первый , если есть, потому что вы не хотели создавать отдельные методы для кнопок «вперед» и «назад». Если вы создадите 2 отдельных метода, код будет короче, чище, и вы избавитесь от первых , если .
  • Тогда ваш код состоит из 2 методов с одним if-else . Поскольку вы просто перемещаете этот индекс между 0 и contents.length , вы можете вместо этого использовать модуль % и удалить его, если он тоже. Что-то вроде:
 this.currentContentId = (this.currentContentId + 1 + loopLength) % loopLength
 

Другие возможности, если вы хотите сохранить ifs:

  • Я бы выделил условия ваших ifs в такие методы, как isOnFirstItem или isOnLastItem , что значительно повышает читаемость для тех, кто никогда раньше не видел код.
  • Вместо того, чтобы изменять currentContentId , я бы создал явные методы, такие как goForward , goFirst , goPrevious , goBack .
\$\конечная группа\$

6

\$\начало группы\$

Эта часть:

 if (e.target.parentElement.id === "nav__back") {
    если (this.currentContentId == 0) {
      this.currentContentId = длина цикла
    } еще {
      this.currentContentId--
    }
    
  } еще {
    если (this.currentContentId == loopLength) {
      this.currentContentId = this.currentContentId — длина цикла
    } еще {
      this.currentContentId++
    }
  }
 

Фактически перемещает currentContentId вперед или назад на 1 с циклическим переносом.

Обратите внимание, что это:

 if (this.currentContentId == loopLength) {
    this.currentContentId = this.currentContentId — длина цикла
}
 

Равно: (потому что мы уже знаем, что this. currentContentId == loopLength )

 if (this.currentContentId == loopLength) {
    этот.currentContentId = 0
}
 

Таким образом, все это можно записать как:

 пусть смещение = e.target.parentElement.id === "nav__back" ? -1 : 1
this.currentContentId = (this.currentContentId + смещение + this.content.length) % this.content.length
 
\$\конечная группа\$

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

Создание пользовательской карусели сообщений в Elementor

Создавайте сложные веб-сайты за меньшее время.

Pro

Карусель сообщений

Настройте виджет карусели сообщений на свои веб-сайты Elementor…

Посмотреть демо

Бесплатно

Lordicon: анимированные иконки

Мощная библиотека анимированных иконок с Более 1500 бесплатных и премиальных анимированных…

Посмотреть демонстрацию

Pro

Карусель продуктов WooCommerce

Помогает продемонстрировать ваши продукты Woocommerce на любой странице Elementor…

Посмотреть демо

Бесплатно

Карусель карточек

Используйте этот виджет для отображения двух или более частей контента в…

Посмотреть демонстрацию

Бесплатно

Фигуры капель

Создавайте случайные, уникальные и органично выглядящие формы капель. Вы можете…

Посмотреть демо

Pro

Динамическая карусель шаблонов

Этот виджет позволяет создавать циклический элемент так же, как один.

..

Просмотреть демонстрацию

Pro

Аккордеон изображений

Неограниченные возможности дизайна для изменения стилей в соответствии с…

Просмотреть демонстрацию

Pro

Боковое меню

Создавайте расширенные меню WordPress для управления стилем для…

Просмотреть демоверсию

Pro

Слайдер открыток

Настройте виджет слайдера открыток на свои веб-сайты Elementor…

Просмотреть демонстрацию

Pro

Динамическая сетка шаблонов

Позволяет создавать циклический элемент так же, как одиночный шаблон… Виджет сетки постов можно использовать для разместить свои сообщения рядом с…

Посмотреть демо

Бесплатно

Простой слайдер

Простой слайдер — это самый простой и быстрый способ настроить простой…

Посмотреть демо

Pro

Вкладки со значками0003

Вкладки со значками помогают отображать содержимое веб-сайта в интерактивном режиме…

Просмотреть демоверсию

Pro

Загрузить еще / Бесконечная прокрутка

Виджет Загрузить еще / Бесконечная прокрутка дает вам возможность. ..

Просмотр Demo

Pro

AJAX Search

Самый быстрый виджет поиска AJAX для вашего сайта WordPress. Легко…

Посмотреть демоверсию

Бесплатно

Флип-бокс

Флип-боксы имеют полностью настраиваемое содержимое спереди и сзади…

Посмотреть демо

Бесплатно

Блоки сообщений

Виджеты Блоки сообщений представляют собой сетку для отображения вашего блога… 04 Отличный способ продемонстрировать посты в интерактивном макет карусели…

Посмотреть демо

Бесплатно

Хронология маркеров

Перечислите свои функции или услуги, используя маркеры, чтобы сделать это…

Посмотреть демо

Бесплатно

Анимированный значок гамбургера

Этот виджет имеет 9 различных эффектов на выбор. Пока вы…

Посмотреть демо

Бесплатно

Номерной ящик

Виджет числового поля поможет вам создать потрясающие числовые поля… 4 Виджет Unlimited Table дает вам самый простой способ создать таблицу.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *