jQuery 数组 (i) 中的错误,将 +1 添加到负值时

Bug in jQuery array (i), when adding a +1 to a negative value

我想我正在与一个错误作斗争。我在 jquery 中构建了一个小型旋转木马。更多的是一些盒子相互堆叠,当我的用户单击下一个和上一个箭头时,它们的 z-index (jquery.css) 会发生变化。到目前为止一切顺利,轮播与 owl-轮播相连,但它是独立的。每个盒子都有一个 class,我将其存储在一个数组中,然后用 jquery 循环遍历。问题如下:

Jquery:

$(document).ready(function () {

    var carousel = $('.covercarousel');
    var carouselnum = carousel.length;
    var i = 0;

    $('.owl-next').click(function () {
        i++;

        $(carousel).css('zIndex', '0');
        $(carousel[i]).css('zIndex', '2');
        if (i == (carouselnum-1)) {
            $(carousel).css('zIndex', '2');
            i = -1;
        }
    });

    $('.owl-prev').click(function () {
        i--;
        $(carousel).css('zIndex', '0');
        $(carousel[i]).css('zIndex', '2');
        if (i < 0) {

            i = carouselnum-1;
            $(carousel[5]).css('z-index', '2');
            $(carousel).css('zIndex', '0');
        }
    });
});

HTML:

<div class="covercarouselbox">
    <div class="covercarousel">
        <div>
            a
        </div>
    </div>
    <div class="covercarousel">
        <div>
            b
        </div>
    </div>
    <div class="covercarousel">
        <div>
            c
        </div>
    </div>
    <div class="covercarousel">
        <div>
            d
        </div>
    </div>
    <div class="covercarousel">
        <div>
            e
        </div>
    </div>
    <div class="covercarousel">
        <div>
            f
        </div>
    </div>
</div>

当您滚动到下一个 div 时,轮播效果很好。如果您控制台记录 (i),您会注意到计数从 0 到 4 正常工作(数组中有 6 个元素,我给第一个元素一个 z-index 2 css => covercarousel:nth-child(1) {z-index=2} ),因此当您到达数组中的第五个元素时,分配给 i 的值为 -1,因此计数返回到 0 (i++)。

但是当你做相反的事情时,它会停止:第一个值为 0,所以当你将 -1 添加到数组时按下上一个箭头,然后你尝试滚动到下一张幻灯片里面添加 +1对于 i 出于某种原因,如果您控制台记录 (i) 的值,结果将为 5,然后它将继续增长。有什么办法可以防止这种行为吗?

您试图在修改 i 之前和之后修改 DOM,这导致了很多错误,具体取决于用户在单击下一个或上一个时在序列中的确切位置.还有一个地方,您无意中对轮播的长度进行了硬编码,如果它与 DOM 不匹配,则会导致其他问题。当 "next" 按钮循环到开头时故意设置 -1 假定用户将再次单击 "next";如果用户没有完全按照您的计划行事,那也会中断。

我在这里简化了所有内容:先弄清楚 i 应该是什么,然后在此基础上修改 DOM:

$(document).ready(function() {

  var carousel = $('.covercarousel');
  var carouselnum = carousel.length - 1;
  var i = 0;

  $('.owl-next').click(function() {
    i++;
    if (i>carouselnum) {i=0}
    // console.log(i);
    $(carousel).css('backgroundColor', '#FFF');
    $(carousel[i]).css('backgroundColor', '#FFC');
  });

  $('.owl-prev').click(function() {
    i--;
    if (i<0) {i = carouselnum}
    // console.log(i);
    $(carousel).css('backgroundColor', '#FFF');
    $(carousel[i]).css('backgroundColor', '#FFC');    
  });
});
.covercarousel {display:inline-block; padding: 0.5em}
.owl-next, .owl-prev {cursor: pointer}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="covercarouselbox">
  <div class="covercarousel"><div>a</div></div>
  <div class="covercarousel"><div>b</div></div>
  <div class="covercarousel"><div>c</div></div>
  <div class="covercarousel"><div>d</div></div>
  <div class="covercarousel"><div>e</div></div>
  <div class="covercarousel"><div>f</div></div>
</div>
<div class="owl-next">Next</div>
<div class="owl-prev">Prev</div>

(这设置了 backgroundColor 而不是 zIndex,因此您可以看到它在做什么,但其他方面是一样的。)