【发布时间】:2021-09-07 15:22:35
【问题描述】:
我正在通过一个小网站项目学习 JS,偶然发现了以下问题:
- 我有一个图片库,里面有几张照片
- 我总是可以一次看到 5 张图片
- 中间一个大,左右一个第二行,另外两个在后台
我已经有两个按钮可以在图库中旋转。现在我想通过单击中间图片左侧或右侧的图片来旋转图库。
HTML 库
<div class="gallery-container">
<img class="gallery-item gallery-item-1" src="pictures/pic1.jpg" data-index="1">
<img class="gallery-item gallery-item-2 prev-pic" src="pictures/pic2.jpg" data-index="2">
<img class="gallery-item gallery-item-3" src="pictures/pic3.jpg" data-index="3">
<img class="gallery-item gallery-item-4 next-pic" src="pictures/pic4.jpg" data-index="4">
<img class="gallery-item gallery-item-5" src="pictures/pic5.jpg" data-index="5">
</div>
我的 Javascript
const galleryContainer = document.querySelector('.gallery-container');
let galleryItems = document.querySelectorAll('.gallery-item');
let galleryArray = Array.prototype.slice.call(galleryItems);
let prevPic = document.querySelector('.gallery-item.gallery-item-2.prev-pic');
let listenerPrev = prevPic.addEventListener('click', function(prevEvent) {
galleryArray.unshift(galleryArray.pop());
updateGallery();
});
let nextPic = document.querySelector('.gallery-item.gallery-item-4.next-pic');
let listnerNext = nextPic.addEventListener('click', function(nextEvent) {
galleryArray.push(galleryArray.shift());
updateGallery();
});
// Update css classes for gallery
function updateGallery() {
galleryArray.forEach(el => {
el.classList.remove('gallery-item-1');
el.classList.remove('gallery-item-2');
el.classList.remove('gallery-item-3');
el.classList.remove('gallery-item-4');
el.classList.remove('gallery-item-5');
el.classList.remove('prev-pic');
el.classList.remove('next-pic');
});
galleryArray.slice(0, 5).forEach((el, i) => {
el.classList.add(`gallery-item-${i+1}`);
});
document.querySelector('.gallery-item.gallery-item-2').classList.add('prev-pic');
document.querySelector('.gallery-item.gallery-item-4').classList.add('next-pic');
prevPic = document.querySelector('.gallery-item.gallery-item-2.prev-pic');
nextPic = document.querySelector('.gallery-item.gallery-item-4.next-pic');
}
我的计划是单击“prevPic”并旋转图库。第一次点击它工作正常:画廊旋转和类更新。但是当我单击新的“prevPic”时,它什么也不做。我在浏览器中注意到的是,在 devoloper 控制台的 html 中添加的“事件”标签没有移动。
我希望有人理解我试图解释这件事并能帮助我。
提前致谢
【问题讨论】:
-
嗯,代码看起来不错!你也可以分享HTML吗?最好是只包含相关部分的小版本,而不是全部:)
-
我的 HTML 中没有比我已经发布的更多的相关部分了……只有我的容器和图库中的图片。其余的由 js 和 css 完成。我想我需要一些可以刷新 eventListerner 引用的元素的东西,但我不知道如何实现。
标签: javascript html jquery