Я применяю ряд элементов списка фонового изображения из массива изображений.Как сопоставить индекс элемента с индексом массива?
Я создал массив изображений 'артефактов':
var artifacts = [
'/img/artifacts/artifact-1.svg',
'/img/artifacts/artifact-2.svg',
'/img/artifacts/artifact-3.svg',
'/img/artifacts/artifact-4.svg',
'/img/artifacts/artifact-5.svg',
'/img/artifacts/artifact-6.svg',
'/img/artifacts/artifact-7.svg'
];
HTML разметка выглядит следующим образом.
<ul class="slick-dots">
<li>1</li>
<li>2</li>
<li class="slick-active">3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
<li>8</li>
<li>9</li>
</ul>
Существует набор изображений для выбранного типа/выбранного цвета.
var artifactHover = [
'/img/artifacts/artifact-1-hover.svg',
'/img/artifacts/artifact-2-hover.svg',
'/img/artifacts/artifact-3-hover.svg',
'/img/artifacts/artifact-4-hover.svg',
'/img/artifacts/artifact-5-hover.svg',
'/img/artifacts/artifact-6-hover.svg',
'/img/artifacts/artifact-7-hover.svg'
];
А вот мой JavaScript далеко:
$('.slick-dots li').css('background-image', function(i) {
return 'url("' + artifacts[i % artifacts.length] + '")';
});
$('.slick-dots .slick-active').css('background-image', function(i) {
return 'url("' + artifactHover[i % artifactHover.length] + '")';
});
$('.slick-dots li button').click(function() {
$('.slick-dots li').css('background-image', function(i) {
return 'url("' + artifacts[i % artifacts.length] + '")';
});
var index = $(this).parent().index();
$(this).parent().css('background-image', function(i) {
return 'url("' + artifactHover[index] + '")';
});
});
Таким образом, когда пользователь нажимает на элемент списка, он тянет соответствующее изображение из массива на основе от элемента, которая была нажата.
Если есть больше элементов списка, чем есть изображения, тогда оно только начинается и начинается с начала. Моя проблема соответствует текущему выбранному элементу списка с соответствующим изображением наведения. Используя индекс() для наведения артефакта, если я выбираю элемент списка, который больше, чем количество в массиве изображений, он помещает пустое изображение вместо перезапуска с начала списка.
Вы пробовали это: 'artifactHover [index% artifactHover.length]'? –
@ Alexandru-IonutMihai ДА! Спасибо! Извините, я все еще смущен тем, как работает% – h0bb5
@ h0bb5 Это по модулю. Он делает остаток. Итак, '2% 3 = 2' или' 7% 3 = 1'. '7/3 = 2', но у нас осталось 1. – Loaf