I have an array of colors. On load I cycle through the array and add it as a class and text to each div with the class "square"
On click I want to toggle the class/text on that square to the next item in the array.
I have hit 2 snags that I think are related and I know it needs a bit of clean up.
On load the array is starting with the second item in the array instead of the first unless I set the counter to =-1 instead of =0
When I click any square it skips over the next item in the array. and then proceeds normally.
I tried different methods for .each but keep getting trapped in different incorrect results and returning to the last thing that almost works.
When I click a square I expect it to update to the next colour in the array in relation to it's current colour. I also expect the grid to start with black in the top left corner.
$(document).ready(function(){
//array of colours
var colours = ['black', 'blue', 'cyan', 'green', 'magenta', 'red', 'yellow'],
counter = 0;
function nextColour(){
counter = (counter + 1) % colours.length;
}
// on Load iterate over all the squares in the grid
// add the colour class in order of the array & matching text to span
$('.square').each(function(){
nextColour();
$(this).addClass(colours[counter]);
$(this).find("span").html(colours[counter]);
});
// on click change the square to the next colour in the array
$('.square').click(function(){
$(this).removeClass(colours);
$(this).find("span").html("");
nextColour();
// Add next colour in array for this item
$(this).addClass(colours[counter]);
$(this).find("span").html(colours[counter]);
});
});
.squares{
background-color:#dedede;
display: grid;
grid-template-columns: repeat(10, 1fr);
grid-auto-rows: 50px;
height:500px;
width:500px;}
.square{
align-items:center;
color:#000;
display:flex;
justify-content:center;
outline: 1px solid #000;}
.square span{
display:none;
font-size:11px;
text-align:center;
text-transform:capitalize;}
.square:hover span{display:block;}
.black{
background-color:#000;
color:#fff;}
.blue{
background-color:#00f;
color:#fff;}
.cyan{background-color:#0ff;}
.green{background-color:#0f0;}
.magenta{background-color:#F0F;}
.red{background-color:#f00;}
.yellow{background-color:#ff0;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section class="squares">
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
<div class="square"><span></span></div>
</section>