简体   繁体   English

在同一页面上添加多个JavaScript图像滑块

[英]Adding more than one javascript image slider on same page

I want more than one image slider on same page with same class name using JavaScript. 我想使用JavaScript在同一页面上使用同一个类名的多个图像滑块。 I have done for one image slider. 我已经完成了一个图像滑块。

The issues are when I'm using more than one image slider it is not working properly.I tried with childNodes also it doesn't work. 问题是当我使用多个图像滑块时,它无法正常工作。我尝试使用childNodes也无法正常工作。 How can I solve this problem? 我怎么解决这个问题?

And I'm trying to make sliding animation also(left and right) for that image slider. 而且我也尝试为该图像滑块制作滑动动画(左右)。

If you need some more explanation, let me know. 如果您需要更多说明,请告诉我。

I have given the code below; 我已经给出了下面的代码;

HTML 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)">&#10094;</a>
    <a class="next" onclick="controlSlide(1)">&#10095;</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)">&#10094;</a>
    <a class="next" onclick="controlSlide(1)">&#10095;</a> 
 </div>

CSS 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 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";
}

The problem is that you select all the slides at once, with document.getElementsByClassName("slides"). 问题是您一次选择了所有带有document.getElementsByClassName(“ slides”)的幻灯片。

You want to alter you JS methods to work with the sorrounding element 您想要更改JS方法以使用sorrounding元素

<div class="container slider">

and then select and pass theese to controlSlide form showSlides. 然后选择并将它们传递给showSlides形式的controlSlide。 Not tested: 未经测试:

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";
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM