开发者问题收集

JS forEach 数组滑块

2019-09-16
468

我编写了一个函数,当我点击文章中的任何图像时,它会将其放置在滑块中。

Object.keys(bgImages).forEach(function(key){
                bgImages[key].getElementsByTagName('img')[0].onclick = function() {                        modal.style.display = "block";
                        modalImg.src = bgImages[key].getElementsByTagName('img')[0].src;
                    }
                    arrowLeft.onclick = function (){
                        modalImg.src = bgImages[key + 1].getElementsByTagName('img')[0].src;
                    }
              })

现在我需要添加箭头,使用该函数,当我点击时,集合中的下一张或上一张图片会打开

当我尝试使用 bgImages[key + 1].getElementsByTagName('img')[0].src 获取下一张图片时,出现错误 Uncaught TypeError: Cannot read property 'getElementsByTagName' of undefined

变量 bgImages 返回 HTMLCollection

请告诉我我做错了什么。我找到了类似的帖子,但他们的方法不适用于我的例子。

bgImages 的结构

HTMLCollection(5) [figure.figure.figure--over-9000, figure.figure.figure--over-9000, figure.figure.figure--over-9000, figure.figure.figure--over-9000, figure.figure.figure--over-9000]
0: figure.figure.figure--over-9000
1: figure.figure.figure--over-9000
2: figure.figure.figure--over-9000
3: figure.figure.figure--over-9000
4: figure.figure.figure--over-9000
length: 5
__proto__: HTMLCollection

bgImages[key] 的结构: <figure class="figure figure--over-9000"></figure>

当我点击箭头时,我应该从当前集合项目中获取下一个项目

UPD:

我解决了问题( bgImages[key + 1] 返回 bgImages[01] ,但还有一件事:照片只切换一次

2个回答
bgImages[key + 1]

添加类似

var nextImg = bgImages[key + 1];
if(nextImg){
的检查>

当您的 key 指向最后一个元素时, key + 1 将导致未定义。

muasif80
2019-09-16
Object.keys(bgImages).forEach(function(key){
                bgImages[key].getElementsByTagName('img')[0].onclick = function() {                        modal.style.display = "block";
                        modalImg.src = bgImages[key].getElementsByTagName('img')[0].src;
                    }
                    let currentKey = Number(key);
                    arrowLeft.onclick = function (){
                        currentKey += 1;
                        modalImg.src = bgImages[currentKey].getElementsByTagName('img')[0].src;
                    }

A.Burdonskaya
2019-09-16