-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathetch-a-sketch.js
More file actions
121 lines (103 loc) · 2.86 KB
/
etch-a-sketch.js
File metadata and controls
121 lines (103 loc) · 2.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
let size = 16;
const grid_container = document.getElementById('grid-container');
const DEFAULT_COLOUR = 'White';
let currentColour = 'Black';
let currentMode = 'colour';
let colourPicker = document.getElementById('colour-picker');
let colourButton = document.getElementById('colour-button');
let eraseButton = document.getElementById('erase-button');
let clearButton = document.getElementById('clear-button');
let sizeText = document.getElementById('size-text');
let sizeSlider = document.getElementById('size-slider');
colourPicker.onchange = () => setCurrentColour(colourPicker.value);
colourButton.onclick = () => setCurrentMode('colour');
eraseButton.onclick = () => setCurrentMode('erase');
clearButton.onclick = () => reloadGrid();
sizeSlider.onchange = () => resetGrid(sizeSlider.value);
sizeSlider.onmousemove = () => changeSizeText(sizeSlider.value);
function initGrid(s)
{
if(grid_container == null)
{
console.error("Grid container is null");
return;
}
grid_container.style.setProperty('--size', s);
for(c = 0; c < s*s; c++)
{
let cell = document.createElement("div");
grid_container.appendChild(cell).className = "grid-item";
cell.style.backgroundColor = 'White';
cell.addEventListener('mouseover', changeColour);
}
}
function resetGrid(newSize)
{
size = newSize;
deleteGrid();
initGrid(size);
}
function changeSizeText(newSize)
{
sizeText.innerHTML = newSize + ' x ' + newSize;
}
function deleteGrid()
{
if(grid_container == null)
{
console.error("Grid container is null");
return;
}
let cells = document.getElementsByClassName('grid-item');
console.log("Cells length: " + cells.length);
for(let c = 0; c < cells.length;)
{
cells[c].remove(); //probably should use foreach here
}
}
function setCurrentColour(colour)
{
currentColour = colour;
}
function setCurrentMode(mode)
{
currentMode = mode;
changeActiveButton(currentMode);
}
function changeActiveButton(mode)
{
switch(mode)
{
case 'colour':
colourButton.classList.add('active-button')
eraseButton.classList.remove('active-button');
break;
case 'erase':
eraseButton.classList.add('active-button');
colourButton.classList.remove('active-button')
break;
}
}
function reloadGrid()
{
let items = document.getElementsByClassName('grid-item');
for(let i = 0; i < items.length; i++)
items[i].style.backgroundColor = 'White';
}
function changeColour(e)
{
switch(currentMode)
{
case 'colour':
e.target.style.backgroundColor = currentColour;
break;
case 'erase':
e.target.style.backgroundColor = 'White';
break;
}
}
window.onload = () =>
{
initGrid(size);
changeActiveButton('colour');
}