javascript - 为什么我的 slider 脚本中有些元素未定义?

标签 javascript

我正在为 JavaScript 创建图像 slider 。我有它,以便我的左右箭头显示下一张图像。我想添加一个 setInterval 方法来每隔几秒更改一次显示图像。我假设它会像调用函数一样简单,每 3 秒单击一次正确的图像。但是我收到一条错误消息

index.js:26 Uncaught TypeError: Cannot read property 'style' of undefined
    at slideRight (index.js:26)

这是我的代码

let sliderImages = document.querySelectorAll('.slide');
let arrowLeft = document.getElementById('arrow-left');
let arrowRight = document.getElementById('arrow-right');
let current = 0;

function reset() {
    for(let i = 0; i < sliderImages.length; i++) {
        sliderImages[i].style.display = 'none';
    }
}

function startSlider() {
    reset();
    sliderImages[0].style.display = 'block';
}

function slideLeft() {
    reset();
    sliderImages[current - 1].style.display = 'block';
    current --;
}


function slideRight() {
    reset();
    sliderImages[current + 1].style.display = 'block';
    console.log(current);
    current ++;
    console.log(current);
}

arrowLeft.addEventListener('click', function() {
    reset()
    if(current == 0) {
        current = sliderImages.length;
    }
    slideLeft();
});

arrowRight.addEventListener('click', function () {
    if(current == sliderImages.length -1 ) {
        current = -1;
    }

    slideRight();
})
startSlider();

setInterval(slideRight, 3000);

最佳答案

在我看来,您的问题是,当您向右走得太远时,索引不再存在于数组中,因此您需要在向右走时使用模数运算符:

sliderImages[(current + 1) % sliderImages.length].style.display = 'block';

当向左走得太远时,您需要绕到右侧:

sliderImages[current - 1 >= 0 ? 
    current - 1 : sliderImages.length - 1].style.display = 'block';

关于javascript - 为什么我的 slider 脚本中有些元素未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47401250/

相关文章:

javascript - _.memoize适用场景是什么?

javascript - Dropbox drop-in saver 本地主机文件错误

java - 根据复选框值调用 Javascript

javascript - 警报后选择文本

javascript - var 关键字的用途是什么以及何时应该使用它(或省略它)?

javascript - 使用 get 请求进行多个数据库查询

javascript - 将 SVG 转换为 Highcharts.SVGRenderer.prototype.symbols

javascript - React 组件用户不在状态

javascript - 如何在 dijit 菜单上放置垂直滚动条

javascript - 将信息添加到按钮上的 txt 文件单击 ASP.NET