Jmx0OyFET0NUWVBFIGh0bWwmZ3Q7CiZsdDtodG1sIGxhbmc9JnF1b3Q7ZW4mcXVvdDsmZ3Q7CiZsdDtoZWFkJmd0OwogICZsdDttZXRhIGNoYXJzZXQ9JnF1b3Q7VVRGLTgmcXVvdDsgLyZndDsKICAmbHQ7dGl0bGUmZ3Q7SSBMT1ZFIFlPVSZsdDsvdGl0bGUmZ3Q7CiAgJmx0O3N0eWxlJmd0OwogICAgYm9keSB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgaGVpZ2h0OiAxMDB2aDsKICAgICAgbWFyZ2luOiAwOwogICAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKICAgIH0KICAgIC5ncmlkIHsKICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNjUsIDE1cHgpOwogICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IHJlcGVhdCgxMCwgMTVweCk7CiAgICAgIGdhcDogMnB4OwogICAgfQogICAgLmNlbGwgewogICAgICB3aWR0aDogMTVweDsKICAgICAgaGVpZ2h0OiAxNXB4OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzOwogICAgfQogICAgLm9uIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGVlcHBpbms7CiAgICB9CiAgJmx0Oy9zdHlsZSZndDsKJmx0Oy9oZWFkJmd0OwombHQ7Ym9keSZndDsKICAmbHQ7ZGl2IGNsYXNzPSZxdW90O2dyaWQmcXVvdDsgaWQ9JnF1b3Q7Z3JpZCZxdW90OyZndDsmbHQ7L2RpdiZndDsKCiAgJmx0O3NjcmlwdCZndDsKICAgIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZ3JpZCcpOwogICAgY29uc3Qgcm93cyA9IDEwOwogICAgY29uc3QgY29scyA9IDY1OwoKICAgIGNvbnN0IHBpeGVsc09uID0gWwogICAgICBbMSwgMF0sWzIsIDBdLFszLCAwXSxbNCwgMF0sWzUsIDBdLFs2LCAwXSwKICAgICAgWzEsIDRdLFsyLCA0XSxbMywgNF0sWzQsIDRdLFs1LCA0XSxbNiwgNF0sWzYsIDVdLFs2LCA2XSwKICAgICAgWzEsIDldLFsxLCAxMF0sWzEsIDExXSxbMiwgOV0sWzIsIDExXSxbMywgOV0sWzMsIDExXSwKICAgICAgWzQsIDldLFs0LCAxMV0sWzUsIDldLFs1LCAxMV0sWzYsIDldLFs2LCAxMF0sWzYsIDExXSwKICAgICAgWzEsIDE0XSxbMiwgMTRdLFszLCAxNF0sWzQsIDE0XSxbNSwgMTVdLFs2LCAxNl0sCiAgICAgIFs1LCAxN10sWzEsIDE4XSxbMiwgMThdLFszLCAxOF0sWzQsIDE4XSwKICAgICAgWzEsIDIxXSxbMiwgMjFdLFszLCAyMV0sWzQsIDIxXSxbNSwgMjFdLFs2LCAyMV0sCiAgICAgIFsxLCAyMl0sWzMsIDIyXSxbNiwgMjJdLAogICAgICBbMSwgMjVdLFsyLCAyNV0sWzMsIDI1XSxbMywgMjZdLFs0LCAyNl0sWzUsIDI2XSxbNiwgMjZdLAogICAgICBbMSwgMjldLFsxLCAzMF0sWzEsIDMxXSxbMiwgMjldLFsyLCAzMV0sWzMsIDI5XSxbMywgMzFdLAogICAgICBbNCwgMjldLFs0LCAzMV0sWzUsIDI5XSxbNSwgMzFdLFs2LCAyOV0sWzYsIDMwXSxbNiwgMzFdLAogICAgICBbMSwgMzRdLFsyLCAzNF0sWzMsIDM0XSxbNCwgMzRdLFs1LCAzNF0sWzYsIDM0XSwKICAgICAgWzEsIDM2XSxbMiwgMzZdLFszLCAzNl0sWzQsIDM2XSxbNSwgMzZdLFs2LCAzNl0sWzYsIDM1XQogICAgXTsKCiAgICBjb25zdCBjZWxscyA9IFtdOwoKICAgIC8vIOC4quC4o+C5ieC4suC4hyBncmlkCiAgICBmb3IgKGxldCByID0gMDsgciAmbHQ7IHJvd3M7IHIrKykgewogICAgICBmb3IgKGxldCBjID0gMDsgYyAmbHQ7IGNvbHM7IGMrKykgewogICAgICAgIGNvbnN0IGNlbGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoJ2NlbGwnKTsKICAgICAgICBncmlkLmFwcGVuZENoaWxkKGNlbGwpOwogICAgICAgIGNlbGxzLnB1c2goY2VsbCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyDguJ/guLHguIfguIHguYzguIrguLHguJnguYDguJvguLTguJQgY2VsbCDguJfguLXguKXguLDguIjguLjguJQKICAgIGZ1bmN0aW9uIGFuaW1hdGVQaXhlbHMocGl4ZWxzLCBkZWxheSA9IDMwKSB7CiAgICAgIHBpeGVscy5mb3JFYWNoKChbciwgY10sIGluZGV4KSA9Jmd0OyB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9Jmd0OyB7CiAgICAgICAgICBjb25zdCBjZWxsSW5kZXggPSByICogY29scyArIGM7CiAgICAgICAgICBjZWxsc1tjZWxsSW5kZXhdLmNsYXNzTGlzdC5hZGQoJ29uJyk7CiAgICAgICAgfSwgaW5kZXggKiBkZWxheSk7CiAgICAgIH0pOwogICAgfQoKICAgIC8vIOC5gOC4o+C4tOC5iOC4oSBhbmltYXRpb24KICAgIGFuaW1hdGVQaXhlbHMocGl4ZWxzT24pOwogICZsdDsvc2NyaXB0Jmd0OwombHQ7L2JvZHkmZ3Q7CiZsdDsvaHRtbCZndDs=
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>I LOVE YOU</title>
<style>
body {
background-color: white;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
font-family: sans-serif;
}
.grid {
display: grid;
grid-template-columns: repeat(65, 15px);
grid-template-rows: repeat(10, 15px);
gap: 2px;
}
.cell {
width: 15px;
height: 15px;
border: 1px solid #ccc;
background-color: white;
transition: background-color 0.3s;
}
.on {
background-color: deeppink;
}
</style>
</head>
<body>
<div class="grid" id="grid"></div>
<script>
const grid = document.getElementById('grid');
const rows = 10;
const cols = 65;
const pixelsOn = [
[1, 0],[2, 0],[3, 0],[4, 0],[5, 0],[6, 0],
[1, 4],[2, 4],[3, 4],[4, 4],[5, 4],[6, 4],[6, 5],[6, 6],
[1, 9],[1, 10],[1, 11],[2, 9],[2, 11],[3, 9],[3, 11],
[4, 9],[4, 11],[5, 9],[5, 11],[6, 9],[6, 10],[6, 11],
[1, 14],[2, 14],[3, 14],[4, 14],[5, 15],[6, 16],
[5, 17],[1, 18],[2, 18],[3, 18],[4, 18],
[1, 21],[2, 21],[3, 21],[4, 21],[5, 21],[6, 21],
[1, 22],[3, 22],[6, 22],
[1, 25],[2, 25],[3, 25],[3, 26],[4, 26],[5, 26],[6, 26],
[1, 29],[1, 30],[1, 31],[2, 29],[2, 31],[3, 29],[3, 31],
[4, 29],[4, 31],[5, 29],[5, 31],[6, 29],[6, 30],[6, 31],
[1, 34],[2, 34],[3, 34],[4, 34],[5, 34],[6, 34],
[1, 36],[2, 36],[3, 36],[4, 36],[5, 36],[6, 36],[6, 35]
];
const cells = [];
// สร้าง grid
for (let r = 0; r < rows; r++) {
for (let c = 0; c < cols; c++) {
const cell = document.createElement('div');
cell.classList.add('cell');
grid.appendChild(cell);
cells.push(cell);
}
}
// ฟังก์ชันเปิด cell ทีละจุด
function animatePixels(pixels, delay = 30) {
pixels.forEach(([r, c], index) => {
setTimeout(() => {
const cellIndex = r * cols + c;
cells[cellIndex].classList.add('on');
}, index * delay);
});
}
// เริ่ม animation
animatePixels(pixelsOn);
</script>
</body>
</html>