Skip to content
Advertisement

Do I want the buttons to change color when I click on them?

I want that when I click on the buttons it changes color. This is for a slider, the error is that it does not change color when I click, the only thing that changes is the image and I have tried several ways but it has not worked. I put the color in the css but it still does not work.

I have checked all the css but it doesn’t look like the error is there where I think the error is is in the HTML and JavaScript.

*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body{
    width: 100%;
    height: 100vh;
    padding: 40px;
    background-color: rgb(255, 255, 255);
    background-attachment: fixed;
    background-repeat: no-repeat;
    background-size: cover;
    display: flex;
    justify-content: center;
    align-items: center;
}

.container{
    margin-top: 10px;
    height: 28.65rem;
    width: 50.4rem;
    margin-left: 10px;
    position: relative;
}

.slider{
    display: none;
    
}

.slider img{
    border-radius: 10px;
    width: 50rem;
    height: 420px;
    position: relative;
}


.elements{
    text-align: center;
    
}

.quadrate{
    margin-top: 0.70rem;
    cursor: pointer;
    height: 15px;
    width: 15px;
    border-radius: 100%;
    display: inline-block;
    transition: backgraund-color 0.6s ease;
    background-color: rgb(0, 0, 0);



}

.active{
    background-color: red;
}

.contenedor{
    border-radius: 15px;
    width: 51.40rem;
    height: 30rem;
    position: relative;
    background-color: rgb(255, 255, 255);
}

let sliderIndex = 1;
showSlides(sliderIndex);

function pluSlides(n) {
   showSlides(sliderIndex += n)
}
function currentSlide(n) {
   showSlides(sliderIndex = n)
}


function showSlides(n) {

   let i;
   let slider = document.querySelectorAll(".slider");
   let quadrates = document.querySelectorAll("quadrate ");

   if (n > slider.length) sliderIndex = 1
   if (n < 1) sliderIndex = sliderIndex.length

   for (i = 0; i < slider.length; i++) {
      slider[i].style.display = "none";
   }
   for (i = 0; i < quadrates.length; i++) {
      quadrates[i].className = quadrates[i].className.replace(" active", "")
   }

   slider[sliderIndex - 1].style.display = "block";
   quadrates[sliderIndex - 1].className += "active";


}
    <section class="contenedor">
        <div class="container"> 
            
            <div class="slider"> 
                <img src="imaganes/imagen_1.jpg" alt="imagen-1"> 
            </div>
            <div class="slider"> 
                <img src="imaganes/imagen_2.jpg"> 
            </div>
            <div class="slider"> 
                <img src="imaganes/imagen_3.jpg"> 
            </div>

            <div class="elements">
                <span class="quadrate active" onclick="currentSlide(1)"></span>
                <span class="quadrate" onclick="currentSlide(2)"></span>
                <span class="quadrate" onclick="currentSlide(3)"></span>
            </div>
        </div> 
    </section>

    <script src="home.js"></script>

Advertisement

Answer

You code has 2 issues:

The following lines of code needs to have a space or else the className gets concatenated to quadrateactive instead of being quadrate active. You can fix that by changing the following lines of code:

From:

slider[sliderIndex - 1].style.display = "block";
quadrates[sliderIndex - 1].className += "active";

To:

slider[sliderIndex - 1].style.display = " block";
quadrates[sliderIndex - 1].className += " active";

Secondly, the query selector for selecting quadrates should be:
let quadrates = document.querySelectorAll(".quadrate");

Instead of:
let quadrates = document.querySelectorAll("quadrate ");

let sliderIndex = 1;
showSlides(sliderIndex);

function pluSlides(n) {
  showSlides(sliderIndex += n)
}

function currentSlide(n) {
  showSlides(sliderIndex = n)
}


function showSlides(n) {

  let i;
  let slider = document.querySelectorAll(".slider");
  let quadrates = document.querySelectorAll(".quadrate");
  

  if (n > slider.length) sliderIndex = 1
  if (n < 1) sliderIndex = sliderIndex.length

  for (i = 0; i < slider.length; i++) {
    slider[i].style.display = "none";
  }
  for (i = 0; i < quadrates.length; i++) {
    quadrates[i].className = quadrates[i].className.replace(" active", "")
  }

  slider[sliderIndex - 1].style.display = " block";
  quadrates[sliderIndex - 1].className += " active";


}
*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body{
    width: 100%;
    height: 100vh;
    padding: 40px;
    background-color: rgb(255, 255, 255);
    background-attachment: fixed;
    background-repeat: no-repeat;
    background-size: cover;
    display: flex;
    justify-content: center;
    align-items: center;
}

.container{
    margin-top: 10px;
    height: 28.65rem;
    width: 50.4rem;
    margin-left: 10px;
    position: relative;
}

.slider{
    display: none;
    
}

.slider img{
    border-radius: 10px;
    width: 50rem;
    height: 420px;
    position: relative;
}


.elements{
    text-align: center;
    
}

.quadrate{
    margin-top: 0.70rem;
    cursor: pointer;
    height: 15px;
    width: 15px;
    border-radius: 100%;
    display: inline-block;
    transition: backgraund-color 0.6s ease;
    background-color: rgb(0, 0, 0);
}

.active{
    background-color: red;
}

.contenedor{
    border-radius: 15px;
    width: 51.40rem;
    height: 30rem;
    position: relative;
    background-color: rgb(255, 255, 255);
}
<section class="contenedor">
  <div class="container">

    <div class="slider">
      <img src="https://via.placeholder.com/728x90.png?text=Visit+WhoIsHostingThis.com+Buyers+GuideC/O%20https://placeholder.com/" alt="imagen-1">
    </div>
    <div class="slider">
      <img src="https://via.placeholder.com/728x90.png?text=Visit+WhoIsHostingTwoThis.com+Buyers+GuideC/O%20https://placeholder.com/">
    </div>
    <div class="slider">
      <img src="https://via.placeholder.com/728x90.png?text=Visit+WhoIsHostingThisThree.com+Buyers+GuideC/O%20https://placeholder.com/">
    </div>

    <div class="elements">
      <span class="quadrate active" onclick="currentSlide(1)"></span>
      <span class="quadrate" onclick="currentSlide(2)"></span>
      <span class="quadrate" onclick="currentSlide(3)"></span>
    </div>
  </div>
</section>
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement