- Code with Ahsan - Newsletter
- Posts
- Memexplanation: Adding a Playful Twist to Form Submission: The Rotating Button
Memexplanation: Adding a Playful Twist to Form Submission: The Rotating Button
Memexplanation: Adding a Playful Twist to Form Submission: The Rotating Button
In this quick tutorial, we'll inject some fun into a standard web form. Imagine a submit button that, upon click, doesn't just blandly submit your form but instead takes a spin—literally. It's a simple trick, but it adds a memorable touch to the user's experience. Let's dive in.
Setup
You'll need:
A basic understanding of HTML, CSS, and JavaScript.
An environment to write and test web code (e.g., a text editor and a browser).
Step 1: HTML Structure
First, let's set up the form. Create an HTML file and paste the following code:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Fun Button</title>
<style>
/* CSS goes here */
</style>
</head>
<body>
<div class="container">
<form onsubmit="rotateButton(event)">
<label for="name">Name</label>
<input type="text" id="name" name="name" value="Ahsan" />
<label for="email">Email</label>
<input
type="email"
id="email"
name="email"
value="[email protected]"
/>
<button id="funButton">
<div class="loader" id="loader"></div>
Submit
</button>
</form>
</div>
<script>
// JavaScript goes here
</script>
</body>
</html>
Step 2: Styling with CSS
Within the <style>
section of the HTML head, add:
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #f0f0f0;
}
.form {
display: flex;
flex-direction: column;
gap: 20px;
background: #fff;
padding: 40px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
/* Additional CSS omitted for brevity */
This CSS centers the form on the page and styles the inputs and button.
Step 3: JavaScript Magic
Replace the JavaScript placeholder in the HTML file with:
function rotateButton(ev) {
ev.preventDefault();
var btn = document.getElementById("funButton");
// Apply infinite rotation animation to the button
btn.style.transformOrigin = "79px 20px";
btn.style.animation = "rotateButtonInfinitely 0.5s linear infinite";
}
This function gets called when the form is submitted, preventing the default action and instead applying a rotation to the button.
Final Code
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Fun Button</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #f0f0f0;
}
.container {
text-align: center;
}
form {
display: flex;
flex-direction: column;
gap: 20px;
background: #fff;
padding: 40px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}
input[type="text"],
input[type="email"] {
padding: 10px;
font-size: 16px;
border: 1px solid #ccc;
border-radius: 4px;
}
#funButton {
padding: 10px 20px;
font-size: 16px;
cursor: pointer;
border: none;
background-color: #007bff;
color: white;
display: inline-flex;
justify-content: center;
align-items: center;
gap: 10px; /* Add some space between the loader and the button text */
}
.loader {
border: 2px solid #f3f3f3; /* Light grey */
border-top: 2px solid #3498db; /* Blue */
border-radius: 50%;
width: 12px;
height: 12px;
display: inline-block;
}
@keyframes rotateButtonInfinitely {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
</style>
</head>
<body>
<div class="container">
<form onsubmit="rotateButton(event)">
<label for="name">Name</label>
<input type="text" id="name" name="name" value="Ahsan" />
<label for="email">Email</label>
<input
type="email"
id="email"
name="email"
value="[email protected]"
/>
<button id="funButton">
<div class="loader" id="loader"></div>
Submit
</button>
</form>
</div>
<script>
function rotateButton(ev) {
ev.preventDefault();
var btn = document.getElementById("funButton");
// Apply infinite rotation animation to the button
btn.style.transformOrigin = "79px 20px";
btn.style.animation = "rotateButtonInfinitely 0.5s linear infinite";
}
</script>
</body>
</html>
Explanation
The humor and novelty come from subverting expectations. Instead of a loader spinning or the form simply submitting, the submit button itself takes a whimsical spin. It's a small touch but adds a unique interaction that can make the experience more enjoyable for the user.
Conclusion
That's it! With just a bit of HTML, CSS, and JavaScript, you've added a playful interaction to a web form. This example illustrates how even small tweaks can significantly enhance the user experience, making your projects more memorable.
Reply