Skip to content

Commit 382c076

Browse files
committed
fix: revert style, script
1 parent e52f18e commit 382c076

File tree

4 files changed

+499
-0
lines changed

4 files changed

+499
-0
lines changed

assets/css/main.css

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
:root {
2+
--color1-bg: rgba(83, 46, 63, 0.3);
3+
--color1-border: rgba(112, 73, 93, 1);
4+
--color2-bg: rgba(38, 52, 84, 0.3);
5+
--color2-border: rgba(52, 88, 133, 1);
6+
--color3-bg: rgba(57, 80, 82, 0.3);
7+
--color3-border: rgb(92, 140, 130);
8+
--color4-bg: rgba(44, 60, 79, 0.3);
9+
--color4-border: rgba(64, 96, 115, 1);
10+
--color5-bg: rgba(61, 43, 88, 0.3);
11+
--color5-border: rgba(88, 74, 131, 1);
12+
--color6-bg: rgba(83, 79, 53, 0.3);
13+
--color6-border: rgb(131, 120, 75);
14+
--color7-bg: rgba(56, 83, 53, 0.3);
15+
--color7-border: rgb(75, 131, 97);
16+
--color8-bg: rgba(53, 78, 83, 0.3);
17+
--color8-border: rgb(75, 84, 131);
18+
--color9-bg: rgba(83, 53, 81, 0.3);
19+
--color9-border: rgb(115, 75, 131);
20+
--color0-bg: rgba(83, 53, 53, 0.3);
21+
--color0-border: rgb(131, 75, 75);
22+
}
23+
24+
* {
25+
box-sizing: border-box;
26+
margin: 0;
27+
padding: 0;
28+
}
29+
30+
body {
31+
font-family: Arial, sans-serif;
32+
height: 100vh;
33+
background-color: #251F35;
34+
display: flex;
35+
justify-content: center;
36+
align-items: center;
37+
position: relative;
38+
}
39+
40+
.wrapper {
41+
display: flex;
42+
flex-direction: column;
43+
justify-content: center;
44+
align-items: center;
45+
}
46+
47+
.container {
48+
display: flex;
49+
align-items: flex-end;
50+
gap: 0;
51+
/* Để các cột nằm liền kề nhau */
52+
margin-bottom: 10px;
53+
/* Tạo khoảng cách cho các chỉ mục */
54+
}
55+
56+
.column {
57+
width: 50px;
58+
color: white;
59+
text-align: center;
60+
display: flex;
61+
justify-content: center;
62+
align-items: flex-end;
63+
border-radius: 5px 5px 0 0;
64+
/* Chỉ bo góc trên */
65+
padding: 10px;
66+
margin: 0 2.5px;
67+
/* Khoảng cách giữa các cột */
68+
transition: swap 0.5s ease 0.5s ease;
69+
cursor: pointer;
70+
}
71+
72+
/* Cột 1 */
73+
.column1 {
74+
background-color: var(--color1-bg);
75+
border: 2px solid var(--color1-border);
76+
}
77+
78+
/* Cột 2 */
79+
.column2 {
80+
background-color: var(--color2-bg);
81+
border: 2px solid var(--color2-border);
82+
}
83+
84+
/* Cột 3 */
85+
.column3 {
86+
background-color: var(--color3-bg);
87+
border: 2px solid var(--color3-border);
88+
}
89+
90+
/* Cột 4 */
91+
.column4 {
92+
background-color: var(--color4-bg);
93+
border: 2px solid var(--color4-border);
94+
}
95+
96+
/* Cột 5 */
97+
.column5 {
98+
background-color: var(--color5-bg);
99+
border: 2px solid var(--color5-border);
100+
}
101+
102+
/* Cột 6 */
103+
.column6 {
104+
background-color: var(--color6-bg);
105+
border: 2px solid var(--color6-border);
106+
}
107+
108+
/* Cột 7 */
109+
.column7 {
110+
background-color: var(--color7-bg);
111+
border: 2px solid var(--color7-border);
112+
}
113+
114+
/* Cột 8 */
115+
.column8 {
116+
background-color: var(--color8-bg);
117+
border: 2px solid var(--color8-border);
118+
}
119+
120+
/* Cột 9 */
121+
.column9 {
122+
background-color: var(--color9-bg);
123+
border: 2px solid var(--color9-border);
124+
}
125+
126+
/* Cột 0 */
127+
.column0 {
128+
background-color: var(--color0-bg);
129+
border: 2px solid var(--color0-border);
130+
}
131+
132+
.index,
133+
.letters,
134+
.numerals {
135+
display: flex;
136+
justify-content: space-between;
137+
/* width: calc(6 * 55px + 10px); */
138+
/* Tính toán chiều rộng của container chỉ mục */
139+
}
140+
141+
.index-item,
142+
.letter-item,
143+
.numerals-item {
144+
width: 50px;
145+
text-align: center;
146+
color: #00f2ff;
147+
font-weight: bold;
148+
position: relative;
149+
top: 20px;
150+
padding: 10px;
151+
margin: 0 2.5px;
152+
/* Điều chỉnh vị trí chỉ mục để nằm ngay dưới các cột */
153+
}
154+
155+
.letter-item,
156+
.numerals-item {
157+
color: #ffe100;
158+
}
159+
160+
.letters {
161+
margin-top: 10px;
162+
/* Khoảng cách giữa chỉ mục và dãy chữ cái */
163+
}
164+
165+
.numerals {
166+
margin-top: 10px;
167+
/* Khoảng cách giữa chỉ mục và dãy chữ cái */
168+
}
169+
170+
171+
172+
/* JS */
173+
.chose {
174+
color: red
175+
}

assets/js/genArr.js

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
const min = 10; // Minimum value (inclusive)
2+
const max = 50; // Maximum value (inclusive)
3+
let arrRoot = 0;
4+
5+
function delay(ms) {
6+
return new Promise(resolve => setTimeout(resolve, ms));
7+
}
8+
9+
const genRandom = function (n) {
10+
return Array.from({ length: n }, () => Math.floor(Math.random() * (max - min + 1)) + min);
11+
}
12+
13+
const genCol = function (id, val) {
14+
let borderStyle = id;
15+
if (borderStyle > 9)
16+
borderStyle = borderStyle - 9;
17+
return (
18+
`
19+
<div class="parent">
20+
<div class="column column${borderStyle} " id="col${id}" style="height: ${val * 10}px;" value="${val}">
21+
<!-- <p class="value">${val}</p> -->
22+
${val}
23+
</div>
24+
</div>
25+
`);
26+
}
27+
28+
const genIndex = function (val) {
29+
return `<div class="index-item id${val}">${val}</div>`;
30+
}
31+
32+
const genLetter = function (id) {
33+
return `<div class="letter-item letter${id}"></div>`;
34+
}
35+
36+
const genNumeral = function (id) {
37+
return `<div class="numerals-item numeral${id}"></div>`;
38+
}
39+
40+
const genMaps = function (n) {
41+
const index = document.querySelector('#indexs');
42+
const container = document.querySelector('#columns');
43+
const letter = document.querySelector('#letters');
44+
const numeral = document.querySelector('#numerals');
45+
46+
const arr = genRandom(n);
47+
console.log(arr)
48+
arrRoot = arr;
49+
let columnsHTML = '';
50+
let indexsHTML = '';
51+
let lettersHTML = '';
52+
let numeralsHTML = '';
53+
for (let i = 0; i < arr.length; i++) {
54+
const colHTML = genCol(i, arr[i]);
55+
const indexHTML = genIndex(i);
56+
const letterHTML = genLetter(i);
57+
const numeralHTML = genNumeral(i);
58+
columnsHTML += colHTML;
59+
indexsHTML += indexHTML;
60+
lettersHTML += letterHTML;
61+
numeralsHTML += numeralHTML;
62+
}
63+
container.innerHTML = columnsHTML;
64+
index.innerHTML = indexsHTML;
65+
letter.innerHTML = lettersHTML;
66+
numeral.innerHTML = numeralsHTML;
67+
}
68+
69+
70+
//sort
71+
72+
document.addEventListener('DOMContentLoaded', () => {
73+
const columns = document.querySelectorAll('.column');
74+
75+
const simulation = async function (arr) {
76+
const n = arr.length;
77+
78+
// Lặp qua từng phần tử trong mảng
79+
for (let i = 0; i < n - 1; i++) {
80+
// So sánh phần tử hiện tại với các phần tử phía sau
81+
for (let j = i + 1; j < n; j++) {
82+
83+
const colI = document.getElementById(`col${i}`);
84+
// alert(`col${i} - col${j}`)
85+
const colJ = document.getElementById(`col${j}`);
86+
colI.style.border = '2px solid red';
87+
colJ.style.border = '2px solid red';
88+
await delay(500);
89+
if (arr[j] < arr[i]) {
90+
colI.style.border = '2px solid green';
91+
colJ.style.border = '2px solid green';
92+
// Hoán đổi nếu phần tử hiện tại lớn hơn phần tử phía sau
93+
swapColumns(colI, colJ);
94+
await delay(1000);
95+
const temp = arr[i];
96+
arr[i] = arr[j];
97+
arr[j] = temp;
98+
// return;
99+
}
100+
101+
// Xóa các border sau khi hoàn tất hoán đổi
102+
colI.style.border = '';
103+
colJ.style.border = '';
104+
}
105+
}
106+
}
107+
108+
async function swapColumns(column1, column2) {
109+
const col1InitialLeft = column1.offsetLeft;
110+
const col2InitialLeft = column2.offsetLeft;
111+
112+
// Thêm transition và transform để thực hiện hiệu ứng di chuyển
113+
column1.style.transition = 'transform 1s';
114+
column2.style.transition = 'transform 1s';
115+
116+
column1.style.transform = `translateX(${col2InitialLeft - col1InitialLeft}px)`;
117+
column2.style.transform = `translateX(${col1InitialLeft - col2InitialLeft}px)`;
118+
119+
// Sử dụng transitionend để xác định khi hiệu ứng kết thúc
120+
const handleTransitionEnd = () => {
121+
// Gỡ bỏ các transition và transform sau khi hiệu ứng kết thúc
122+
column1.style.transition = '';
123+
column2.style.transition = '';
124+
column1.style.transform = '';
125+
column2.style.transform = '';
126+
127+
// // Hoán đổi vị trí trong DOM
128+
const height1 = column1.style.height;
129+
const height2 = column2.style.height;
130+
131+
const content1 = column1.textContent;
132+
const content2 = column2.textContent;
133+
134+
column1.style.height = height2;
135+
column2.style.height = height1;
136+
column1.textContent = content2;
137+
column2.textContent = content1;
138+
139+
// Gỡ bỏ sự kiện để tránh lắng nghe nhiều lần
140+
column1.removeEventListener('transitionend', handleTransitionEnd);
141+
column2.removeEventListener('transitionend', handleTransitionEnd);
142+
};
143+
144+
// Thêm sự kiện transitionend vào các cột
145+
column1.addEventListener('transitionend', handleTransitionEnd, { once: true });
146+
column2.addEventListener('transitionend', handleTransitionEnd, { once: true });
147+
}
148+
149+
document.getElementById('sort').addEventListener('click', () => {
150+
simulation(arrRoot);
151+
});
152+
});
153+

0 commit comments

Comments
 (0)