draw()
The draw() function runs once when the page loads (inside $(document).ready()). It populates seven HTML lists with all the numbers and text labels that will be positioned in circles. Each list item gets a data-item attribute for reference and the displayed text. Notice how day names and month names come from pre-defined arrays at the top of the file rather than being generated—this is cleaner than hard-coding them in a loop.
🔬 This loop creates 60 seconds (0-59). What happens if you change the loop condition from i < 60 to i < 12, so only 12 seconds are shown? How does that change what you see on the clock?
for (i = 0; i < 60; i++) {
D = i < 10 ? "0" + i : i;
$("#s").append("<li data-item=" + D + ">" + D + "</li>");
}
function draw() {
for (i = 0; i < 60; i++) {
D = i < 10 ? "0" + i : i;
$("#s").append("<li data-item=" + D + ">" + D + "</li>");
}
for (i = 0; i < 60; i++) {
D = i < 10 ? "0" + i : i;
$("#m").append("<li data-item=" + D + ">" + D + "</li>");
}
for (i = 0; i < 24; i++) {
D = i < 10 ? "0" + i : i;
$("#h").append("<li data-item=" + D + ">" + D + "</li>");
}
for (i = 1; i <= 31; i++) {
D = i < 10 ? "0" + i : i;
$("#dom").append("<li data-item=" + D + ">" + D + "</li>");
}
for (i = 1; i <= 12; i++) {
D = i < 10 ? "0" + i : i;
$("#mon").append("<li data-item=" + D + ">" + monthNames[D - 1] + "</li>");
}
for (i = 1; i <= 7; i++) {
D = i;
$("#dow").append("<li data-item=" + D + ">" + dayNames[D - 1] + "</li>");
}
for (i = 0; i < 50; i++) {
D = i < 10 ? "0" + i : i;
$("#y").append("<li data-item=" + D + ">20" + D + "</li>");
}
}
Line-by-line explanation (8 lines)
🔧 Subcomponents:
for (i = 0; i < 60; i++) {
Creates 60 list items (0-59) for seconds display
for (i = 0; i < 60; i++) {
Creates 60 list items (0-59) for minutes display
for (i = 0; i < 24; i++) {
Creates 24 list items (0-23) for hours display
for (i = 1; i <= 31; i++) {
Creates 31 list items (1-31) for day of month display
for (i = 1; i <= 12; i++) {
Creates 12 list items with month abbreviations (Jan-Dec)
for (i = 1; i <= 7; i++) {
Creates 7 list items with day names (Sun-Sat)
for (i = 0; i < 50; i++) {
Creates 50 list items (2000-2049) for year display
for (i = 0; i < 60; i++) {- Loop runs 60 times (once for each second value 0-59)
D = i < 10 ? "0" + i : i;- Ternary operator: if i is less than 10, prepend a zero (so 3 becomes '03'); otherwise use i as-is. This ensures two-digit formatting.
$("#s").append("<li data-item=" + D + ">" + D + "</li>");- jQuery appends a new list item to the seconds list (#s) containing the formatted number, storing it in the data-item attribute
for (i = 0; i < 24; i++) {- Hours loop runs 24 times for hours 0-23 in 24-hour format
for (i = 1; i <= 31; i++) {- Day of month loop starts at 1 (not 0) and goes to 31 inclusive, since dates are numbered 1-31, not 0-30
$("#mon").append("<li data-item=" + D + ">" + monthNames[D - 1] + "</li>");- Appends month names from the monthNames array using index D-1 (because months are 1-12 but array indices are 0-11)
$("#dow").append("<li data-item=" + D + ">" + dayNames[D - 1] + "</li>");- Appends day names from the dayNames array, using index D-1 to map day numbers to names
for (i = 0; i < 50; i++) {- Year loop runs 50 times to display 50 years (2000-2049), which is a 25-year cycle starting from 2000 and repeating