# Learn Recursion by Building a Decimal to Binary Converter - Step 84

### Tell us what’s happening:

I am trying to solve the following:
Next, you’ll create an object to represent the first frame of your animation. Your object should have three properties or keys: `inputVal`, `marginTop`, and `addElDelay`.

`inputVal` will represent the value of the input each time your recursive function runs. `marginTop` will be the top margin for DOM elements you’ll add to the page. And `addElDelay` will be the delay between adding DOM elements to the page.

Add an object to `animationData` with an `inputVal` property set to `5`, a `marginTop` property set to `300`, and an `addElDelay` property set to `1000`.

`` const animationData = [obj.inputVal = 5, marginTop = 300, addElDelay = 1000];

animationData.length = 1;``

``````<!-- file: index.html -->
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Decimal to Binary Converter</title>
<body>
<h1>Decimal to Binary Converter</h1>
<div class="input-container">
<label for="number-input">Enter a decimal number:</label>
<input
value=""
type="number"
name="decimal number input"
id="number-input"
class="number-input"
/>
<button class="convert-btn" id="convert-btn">Convert</button>
</div>
<output id="result" for="number-input"></output>
<div id="animation-container"></div>
<script src="script.js"></script>
</body>
</html>
``````
``````/* file: styles.css */
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
}

:root {
--light-grey: #f5f6f7;
--dark-blue: #1b1b32;
--orange: #f1be32;
}

body {
background-color: var(--dark-blue);
font-family: "Times New Roman", Times, serif;
font-size: 18px;
color: var(--light-grey);
display: flex;
flex-direction: column;
align-items: center;
}

h1 {
text-align: center;
font-size: 2.3rem;
margin: 20px 0;
}

.input-container {
margin: 10px 0;
display: flex;
flex-direction: column;
gap: 10px;
justify-content: center;
align-items: center;
}

.convert-btn {
background-color: var(--orange);
cursor: pointer;
border: none;
}

.number-input {
height: 25px;
}

#result {
margin: 10px 0;
min-width: 200px;
width: fit-content;
min-height: 80px;
word-break: break-word;
border: 5px solid var(--orange);
font-size: 2rem;
text-align: center;
}

#animation-container {
margin: auto;
max-width: 300px;
}

.animation-frame {
margin: 250px auto 0;
border: 5px solid var(--orange);
font-size: 1.2rem;
text-align: center;
}

@media screen and (min-width: 500px) {
.input-container {
flex-direction: row;
}

#result {
max-width: 460px;
}
}
``````
``````/* file: script.js */
const numberInput = document.getElementById("number-input");
const convertBtn = document.getElementById("convert-btn");
const result = document.getElementById("result");

// User Editable Region

const animationData = [obj.inputVal = 5, marginTop = 300, addElDelay = 1000];
animationData.length = 1;

// User Editable Region

const decimalToBinary = (input) => {
if (input === 0 || input === 1) {
return String(input);
} else {
return decimalToBinary(Math.floor(input / 2)) + (input % 2);
}
};

const showAnimation = () => {
setTimeout(() => {
console.log("free");
}, 500);
setTimeout(() => {
console.log("Code");
}, 1000);
setTimeout(() => {
console.log("Camp");
}, 1500);
};

const checkUserInput = () => {
const inputInt = parseInt(numberInput.value);

if (!numberInput.value || isNaN(inputInt)) {
return;
}

if (inputInt === 5) {
showAnimation();
return;
}

result.textContent = decimalToBinary(inputInt);
numberInput.value = "";
};

if (e.key === "Enter") {
checkUserInput();
}
});
``````

User Agent is: `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0`