Introduction:
In this tutorial, we will learn how to create a Wrist watch using HTML, CSS, and JavaScript. The clock will show the current time and update in real time. By the end of this tutorial, you will have a better understanding of working with the DOM, handling time using JavaScript’s Date object, and using CSS transforms to animate elements. The project is beginner-friendly and is a great way to enhance your front-end development skills.
Things You Will Learn:
- How to structure a simple project folder.
- HTML and CSS basics for creating a clock layout.
- JavaScript’s Date object and its methods.
- Updating the clock in real-time using setInterval().
- Using CSS transforms to animate clock hands.
Video Tutorial:
For a more interactive experience, check out the video tutorial on my YouTube channel:
Project Folder Structure:
Create a new project folder and set up the following structure:
- index.html
- style.css
- script.js
- watch-background.svg
HTML:
Let’s start by creating the HTML file (index.html):
<!DOCTYPE html> <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Wrist watch</title> <!-- Stylesheet --> <link rel="stylesheet" href="style.css" /> </head> <body> <div class="strap"> <div class="pin"></div> <div class="watch"> <img src="watch background.svg" /> <div class="hour hand" id="hour"></div> <div class="minute hand" id="minute"></div> <div class="seconds hand" id="seconds"></div> </div> </div> <!-- Script --> <script src="script.js"></script> </body> </html>
Â
CSS:
Now, let’s create the CSS file (style.css) to style our clock:
* { padding: 0; margin: 0; box-sizing: border-box; } body { background-color: #cae8c9; } .strap { height: 100vh; width: 7.5em; border: 0.12em solid #3b4547; position: absolute; transform: translateX(-50%); left: 50%; background: radial-gradient(#3b4547 2px, #7ab982 2px); background-size: 1.12em 1.12em; background-position: -0.31em; border-top: none; border-bottom: none; } .strap:before { position: absolute; content: ""; height: 100vh; width: 1.87em; background-color: #456ba8; border: 0.12em solid #3b4547; position: absolute; transform: translateX(-50%); left: 50%; border-top: none; border-bottom: none; } .watch { height: 11.25em; width: 11.25em; background-color: #f5f5f5; position: absolute; transform: translate(-50%, -50%); left: 50%; top: 50%; border-radius: 50%; box-shadow: 0 0 0 0.12em #3b4547, 0 0 0 0.93em #ccc8c9, 0 0 0 1.06em #3b4547; } .pin { position: absolute; height: 1.25em; width: 1.25em; background: linear-gradient(#aab1bc 0.31em, #ccc8c9 0.31em); border: 0.12em solid #3b4547; transform: translate(-50%, -50%); top: 50%; left: calc(50% + 6.56em); } img { height: 11.25em; } .hand { position: absolute; margin: auto; left: 0; right: 0; background-color: #000000; border-radius: 0.31em; transform-origin: bottom; } .hour { height: 2.5em; width: 0.31em; top: 3.12em; } .minute { height: 3.75em; width: 0.31em; top: 1.87em; } .seconds { height: 4.37em; width: 0.18em; top: 1.25em; background-color: #456ba8; }
Â
JS:
Finally, let’s implement the JavaScript logic in the script.js file:
const hour = document.getElementById("hour"); const minute = document.getElementById("minute"); const seconds = document.getElementById("seconds"); const setClock = setInterval(function clock() { let dateNow = new Date(); let hr = dateNow.getHours(); let min = dateNow.getMinutes(); let sec = dateNow.getSeconds(); let calcHr = hr * 30 + min / 2; let calcMin = min * 6; let calcSec = sec * 6; hour.style.transform = `rotate(${calcHr}deg)`; minute.style.transform = `rotate(${calcMin}deg)`; seconds.style.transform = `rotate(${calcSec}deg)`; }, 1000);
Â
Conclusion:
Congratulations! You have successfully created a dynamic clock using HTML, CSS, and JavaScript. Throughout this tutorial, we learned how to structure a project, manipulate the DOM, work with JavaScript’s Date object, and utilize CSS transforms for animations. This project can be a great addition to your portfolio and can be customized further to suit your design preferences. Keep practicing and exploring new front-end techniques to enhance your skills further. Happy coding!