我正在用传呼机做一些旋转木马。轮播显示元素6到6,我显示36个元素。我有一个下一个和上一个按钮。显示的第一个元素是[0,6]。如果我按下上一个按钮,但没有上一个元素(例如,我在第一页上),则它应该环绕并结束。最后一个元素和下一个按钮也是如此。

我的代码如下所示:

$('#img_prev').click(function (e) {
    # change this line so it wraps around
    imgIndex = (imgIndex - 6) % 36;
    alert(imgIndex)
    refreshImages(imgIndex);
    e.preventDefault();
    return false;
});
$('#img_next').click(function (e) {
    imgIndex = (imgIndex + 6) % 36;
    refreshImages(imgIndex);
    e.preventDefault();
    return false;
});

它失败了,因为-6%36是-6而不是30。我可以使用(index < 0) ...来处理它,但我更喜欢带有模数的条件,该条件可以最好地捕获包装行为。

我怎样才能把它包起来(见第二行)?

最佳答案

一种可能的解决方案是this answer:

function mod(x, m) {
    return (x%m + m)%m;
}

$('#img_prev').click(function (e) {
    # this line has been changed, now it wraps around
    imgIndex = mod(imgIndex - 6, 36);
    ...

09-07 15:27