【发布时间】:2017-01-04 20:36:37
【问题描述】:
我正在将一系列列表项应用到一组图像中的背景图像。
我创建了一组图像“工件”:
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] + '")';
});
});
因此,当用户单击列表项时,它会根据单击的元素从数组中提取适当的图像。
如果列表项的数量多于图像的数量,那么它将重新开始并重新从头开始。我的问题是将当前选定的列表项与适当的悬停图像匹配。通过将 index() 用于工件悬停,如果我选择的列表项大于图像数组中的数量,它将放置一个空白图像,而不是从列表的开头重新开始。
【问题讨论】:
-
你试过这个吗:
artifactHover[index%artifactHover.length]? -
@Alexandru-IonutMihai 是的!谢谢!抱歉,我仍然对 % 的工作原理感到困惑
-
@h0bb5 这是一个模数。它做剩下的事情。所以
2 % 3 = 2或7 % 3 = 1。7 / 3 = 2但我们还剩 1 个。 -
@h0bb5,
%用于得到整数除法后的余数。假设你有5张图片,7个li元素。对于第一个li-> 第一个图像,第二个li-> 第二个图像,...对于5thli->5th图像,对于6th图像它将是->6%5哪个等于1。所以对于6th'li' -> 第一个图像,7th li将是7%5图像,这意味着2。希望这会有所帮助。
标签: javascript jquery html css arrays