Как получать значение из массива по кругу?

189
11 апреля 2019, 09:40

Мне нужно получать значение массива по индексу. Суть в том, что по клику на кнопку prev, мне нудно получить следующее значение в массиве, а по клику на кнопку next, предыдущее. По сути нужна карусель, которая после последнего элемента будет переходить на первый

Мне кажется я что то усложняю.

var arrColors = ['red', 'blue', 'green'];
var currentColor = 0;
var currentColorValue = "";
$('.arrow-prev').on('click', function () {
    if(currentColor === 0){
        currentColorValue = arrColors[0];
    } else if (currentColor === 1){
        currentColorValue = arrColors[1];
    } else if (currentColor === 2){
        currentColorValue = arrColors[2];
    } else {
        currentColor = -1;
    }
    currentColor++;
});
$('.arrow-next').on('click', function () {
});
Answer 1

Чисто формальность - обычно next это следующая, а prev это предыдущая, но хозяин барин в моем варианте будет работать не зависимо от длинны массива и в ту и в другую сторону.

$('.arrow-prev').on('click', function () {
  if(currentColor < arrColors.length-1){
    currentColor ++;
  } else  {
    currentColor = 0;
  }
  currentColorValue = arrColors[currentColor];
});
$('.arrow-next').on('click', function () {
  if(currentColor === 0){
    currentColor = arrColors.length-1;
  } else {
     currentColor--;
  }
  currentColorValue = arrColors[currentColor];
});
Answer 2

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

$('.arrow-prev').on('click', function () {
    if(currentColor === 0){
        currentColor = 2;
    } else {
       currentColor--;
    }
    currentColorValue = arrColors[currentColor];
});
$('.arrow-next').on('click', function () {
    if(currentColor === 2){
        currentColor = 0;
    } else {
       currentColor++;
    }
    currentColorValue = arrColors[currentColor];
});
READ ALSO
Обработчик события onkeypress для тега ins

Обработчик события onkeypress для тега ins

Работаю с тегом , на который мне нужно повесить два обработчика событий: onpaste и onkeypressДля наглядности:

188
Как очистить верстку от JS кода?

Как очистить верстку от JS кода?

Есть скаченная из интернета страница с сайтаНужно очистить весь файл с версткой от JS кода

184
ReactCSSTransitionGroup: Почему не работает transitionAppear?

ReactCSSTransitionGroup: Почему не работает transitionAppear?

Пытаюсь сделать плавное появление/исчезновение уведомления, но не работает transitionAppearДелаю добавление элемента(всплытие уведомления) на событие...

188
Ошибка &ldquo;&hellip;table2excel is not a function&rdquo;

Ошибка “…table2excel is not a function”

Пишу расширение для себя, которое конвертирует table на активной странице вкладки браузера в excel файл и сохраняетИспользую библиотеку table2excel

177