【发布时间】:2020-07-31 20:18:39
【问题描述】:
我创建了 2 个轮播。两者都是具有相同 .css 和 .js 文件的克隆,但问题是第一个轮播的下一个和上一个按钮工作正常,但第二个轮播的下一个和上一个按钮不工作。 为什么会发生这种情况。你能解决它吗? 我还尝试通过重命名第二个轮播的类和 id,并为它制作另一个 css 文件和 js。但它再次不起作用。 请说你能做什么。 这是html文件
<div id="wrapper">
<div id="carousel">
<div id="content">
<a href=""> <img class="item" src="images/b1.jpg" /></a>
<a href=""> <img class="item" src="images/images (2).jpeg" /></a>
</div>
</div>
<button id="prev">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path fill="none" d="M0 0h24v24H0V0z" />
<path d="M15.61 7.41L14.2 6l-6 6 6 6 1.41-1.41L11.03 12l4.58-4.59z" />
</svg>
</button>
<button id="next">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path fill="none" d="M0 0h24v24H0V0z" />
<path d="M10.02 6L8.61 7.41 13.19 12l-4.58 4.59L10.02 18l6-6-6-6z" />
</svg>
</button>
</div>
<div id="wrapper">
<div id="carousel">
<div id="content">
<a href=""> <img class="item" src="images/b1.jpg" /></a>
<a href=""> <img class="item" src="images/images (2).jpeg" /></a>
</div>
</div>
<button id="prev">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path fill="none" d="M0 0h24v24H0V0z" />
<path d="M15.61 7.41L14.2 6l-6 6 6 6 1.41-1.41L11.03 12l4.58-4.59z" />
</svg>
</button>
<button id="next">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path fill="none" d="M0 0h24v24H0V0z" />
<path d="M10.02 6L8.61 7.41 13.19 12l-4.58 4.59L10.02 18l6-6-6-6z" />
</svg>
</button>
</div>
CSS
#wrapper {
width: 100%;
max-width: 964px;
position: relative;
}
#carousel {
overflow: auto;
scroll-behavior: smooth;
scrollbar-width: none;
}
#carousel::-webkit-scrollbar {
height: 0;
}
#prev,
#next {
display: flex;
justify-content: center;
align-content: center;
background: white;
border: none;
padding: 8px;
border-radius: 50%;
outline: 0;
cursor: pointer;
position: absolute;
}
#prev {
top: 50%;
left: 0;
transform: translate(50%, -50%);
display: none;
}
#next {
top: 50%;
right: 0;
transform: translate(-50%, -50%);
}
#content {
display: grid;
grid-gap: 16px;
grid-auto-flow: column;
margin: auto;
box-sizing: border-box;
}
.item {
width: 200px;
height: 250px;
background: green;
}
JavaScript
const gap = 16;
const carousel = document.getElementById("carousel"),
content = document.getElementById("content"),
next = document.getElementById("next"),
prev = document.getElementById("prev");
next.addEventListener("click", e => {
carousel.scrollBy(width + gap, 0);
if (carousel.scrollWidth !== 0) {
prev.style.display = "flex";
}
if (content.scrollWidth - width - gap <= carousel.scrollLeft + width) {
next.style.display = "none";
}
});
prev.addEventListener("click", e => {
carousel.scrollBy(-(width + gap), 0);
if (carousel.scrollLeft - width - gap <= 0) {
prev.style.display = "none";
}
if (!content.scrollWidth - width - gap <= carousel.scrollLeft + width) {
next.style.display = "flex";
}
});
let width = carousel.offsetWidth;
window.addEventListener("resize", e => (width = carousel.offsetWidth));
这里第一个轮播是完美的,但秒下一个和上一个按钮不起作用..即使一切都一样。
【问题讨论】:
-
ID 在页面上应该是唯一的,next = document.getElementById("next") 只会获取页面上具有该 ID 的第一个按钮。
-
但我也尝试使用 id="next1" 和 "prev1" 使用另一个 js 文件进行第二个轮播,但出现相同的 prblm...请帮助..我从过去两天开始正在处理它...我做了所有的可能性..但不知道发生了什么
-
ALL 页面上的 id 必须是唯一的。所以不仅
next和prev,还有wrapper、carousel和content。content = document.getElementById("content")将始终针对第一个 div,而不是第二个 -
我也尝试过使用“content1”、“wrapper1”、“carousel1”和“content1”....我想告诉你,触摸和滑动在两个轮播中都很好用,但是这些按钮是 onpy第二个轮播不工作
-
你必须绑定一个事件监听器到每个按钮。你是否也为 next2 和 prev2 做了这个?我马上就有答案了。
标签: javascript html css carousel