javascript - 在同一页面上添加多个 javascript 图像滑块
问题描述
我想要使用 JavaScript 在同一页面上使用相同类名的多个图像滑块。我已经完成了一个图像滑块。
问题是当我使用多个图像滑块时它无法正常工作。我尝试使用 childNodes 也无法正常工作。我怎么解决这个问题?
而且我正在尝试为该图像滑块制作滑动动画(左右)。
如果您需要更多解释,请告诉我。
我已经给出了下面的代码;
HTML
<div class="container slider">
<div class="slides">
<img src="images-/b3.jpg">
</div>
<div class="slides">
<img src="images-/b2.jpg">
</div>
<div class="slides">
<img src="images-/b1.jpg">
</div>
<a class="prev" onclick="controlSlide(-1)">❮</a>
<a class="next" onclick="controlSlide(1)">❯</a>
</div>
<div class="container slider">
<div class="slides">
<img src="images-/b3.jpg">
</div>
<div class="slides">
<img src="images-/b2.jpg">
</div>
<div class="slides">
<img src="images-/b1.jpg">
</div>
<a class="prev" onclick="controlSlide(-1)">❮</a>
<a class="next" onclick="controlSlide(1)">❯</a>
</div>
CSS
.slides{
position: relative;
display:none;
}
img{
width: 100%;
vertical-align:middle;
}
.container
{
max-width: 100%;
position: relative;
margin: auto;
}
.prev, .next {
cursor: pointer;
position: absolute;
top: 50%;
color: black;
font-size: 20px;
}
.prev{
left: 2%;
}
.next{
right: 2%;
}
.prev:hover, .next:hover {
background-color: #f1f1f1;
text-decoration: none;
color: black;
}
JAVASCRIPT
var slides = document.getElementsByClassName("slides");
var position=[1,-1];
var slideIndex=0;
showSlides();
function showSlides() {
controlSlide(position[0]);
setTimeout(showSlides,3000);
}
function controlSlide(position) {
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex +=position;
if (slideIndex>slides.length) {
slideIndex = 1;
}
else if(slideIndex<=0){
slideIndex=slides.length;
}
slides[slideIndex-1].style.display= "block";
}
解决方案
问题是您一次选择所有幻灯片,使用 document.getElementsByClassName("slides")。
您想更改 JS 方法以使用环绕元素
<div class="container slider">
然后选择这些并将这些传递给 controlSlide 表单 showSlides。未测试:
var sliders = document.getElementsByClassName("slider");
var position=[1,-1];
var slideIndex=0;
sliders.forEach(function(slider){
showSlides(slider);
})
function showSlides(slider) {
let slides = slider.childNodes;
controlSlide(slides, position[0]);
setTimeout(showSlides,3000);
}
function controlSlide(slides, position) {
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
slideIndex +=position;
if (slideIndex>slides.length) {
slideIndex = 1;
}
else if(slideIndex<=0){
slideIndex=slides.length;
}
slides[slideIndex-1].style.display= "block";
}
推荐阅读
- twitter - 如何在 Lua 中使用 OAUTH 发送 POST 请求
- json - cURL 到 PowerShell - 哈希表
- python - 如何根据列值从数据帧中提取行到多个 CSV 文件?
- node.js - 使用 Jest 进行单元测试查询器
- jquery - 输入带有html标签的php变量时,jquery .html会引发错误
- python - 为神经网络训练准备 y_target 变量
- ruby-on-rails - 每天过期的数据如何处理?
- sql - PostgreSQL - 如何保持列更新
- javascript - 解决 React JS 中的 API 调用问题(400 错误)
- ios - 除非我将视图添加到容器视图而不是 contentView,否则 UITableViewCell 不起作用