-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsorting.js
More file actions
109 lines (89 loc) · 3.57 KB
/
sorting.js
File metadata and controls
109 lines (89 loc) · 3.57 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
// let n=Number(prompt('enter the size of array'));
let n=30;
function swap(arr1, arr2) {
console.log('In swap()');
let temp = arr1.style.height;
arr1.style.height = arr2.style.height;
arr2.style.height = temp;
}
// Disables sorting buttons used in conjunction with enable, so that we can disable during sorting and enable buttons after it
function disableSortingBtn(){
document.querySelector(".selectionSort").disabled = true;
}
// Disables size slider used in conjunction with enable, so that we can disable during sorting and enable buttons after it
function disableSizeSlider(){
document.querySelector("#arr_sz").disabled = true;
}
// Enables size slider used in conjunction with disable
function enableSizeSlider(){
document.querySelector("#arr_sz").disabled = false;
}
// Disables newArray buttons used in conjunction with enable, so that we can disable during sorting and enable buttons after it
function disableNewArrayBtn(){
document.querySelector(".newArray").disabled = true;
}
// Enables newArray buttons used in conjunction with disable
function enableNewArrayBtn(){
document.querySelector(".newArray").disabled = false;
}
// Used in async function so that we can so animations of sorting, takes input time in ms (1000 = 1s)
function waitforme(milisec) {
return new Promise(resolve => {
setTimeout(() => { resolve('') }, milisec);
})
}
// Selecting size slider from DOM
let arraySize = document.querySelector('#arr_sz');
// Event listener to update the bars on the UI
arraySize.addEventListener('input', function(){
console.log(arraySize.value, typeof(arraySize.value));
createNewArray(parseInt(arraySize.value));
});
// Default input for waitforme function (260ms)
let delay = 200;
// Selecting speed slider from DOM
let delayElement = document.querySelector('#speed_input');
// Event listener to update delay time
delayElement.addEventListener('input', function(){
console.log(delayElement.value, typeof(delayElement.value));
delay = 320 - parseInt(delayElement.value);
});
// Creating array to store randomly generated numbers
let array = [];
// Call to display bars right when you visit the site
createNewArray();
// To create new array input size of array
function createNewArray(noOfBars =n) {
// calling helper function to delete old bars from dom
deleteChild();
// creating an array of random numbers
array = [];
for (let i = 0; i < noOfBars; i++) {
array.push(Math.floor(Math.random() * 250) + 1);
}
console.log(array);
// select the div #bars element
const bars = document.querySelector("#bars");
// create multiple element div using loop and adding class 'bar col'
for (let i = 0; i < noOfBars; i++) {
const bar = document.createElement("div");
bar.style.height = `${array[i]*1}px`;
// bar.style.width=`${array[i]*1}vw`;
bar.classList.add('bar');
bar.classList.add('flex-item');
bar.classList.add(`barNo${i}`);
bars.appendChild(bar);
}
}
// Helper function to delete all the previous bars so that new can be added
function deleteChild() {
const bar = document.querySelector("#bars");
bar.innerHTML = '';
}
// Selecting newarray button from DOM and adding eventlistener
const newArray = document.querySelector(".newArray");
newArray.addEventListener("click", function(){
console.log("From newArray " + arraySize.value);
console.log("From newArray " + delay);
createNewArray(arraySize.value);
});