We can create a die using react with plain CSS and framer-motion library for animating the same using the following approach:
Prerequisites:
- Knowledge of JavaScript (ES6)
- Knowledge of HTML/CSS.
- Basic knowledge of ReactJS.
Creating React Application And Installing Module:
Step 1: Create a React application using the following command:
npx create-react-app rolling-die
Step 2: After creating your project folder i.e. rolling-die, move to it using the following command:
cd rolling-die
Step 3: After creating the ReactJS application, Install the framer-motion modules using the following command:
$ npm install framer-motion
App.js: Now write down the following code in the App.js file. Here, App is our default component where we have written our code.
Example:
App.js
import React, { useState, useEffect } from "react" ;
import { motion } from "framer-motion" ;
import "./App.css" ;
const container = {
hidden: { opacity: 1, scale: 0 },
visible: {
scale: [0, 1],
opacity: 1,
transition: {
staggerChildren: 0.5,
delayChildren: 0.5,
},
},
};
const discsOnTheDie = {
hidden: { y: 20, opacity: 0 },
visible: {
y: 0,
opacity: [0.2, 1],
},
};
const rollTheDie = () => {
return Math.floor(Math.random() * 7 + 1);
};
const App = () => {
const [randomSize, setRandomSize] = useState(rollTheDie());
const discNumbers = new Array(randomSize);
for ( var i = 0; i < discNumbers.length; i++) {
discNumbers[i] = i;
}
useEffect(() => {
setRandomSize(rollTheDie());
}, [randomSize]);
return (
<div>
<motion.ul
className= "square-container"
variants={container}
initial= "hidden"
animate= "visible"
>
{ }
{discNumbers.map((index) => (
<motion.li key={index} className= "disc"
variants={discsOnTheDie} />
))}
</motion.ul>
<button
onClick={() => {
setRandomSize();
}}
>
{ " " }
ROLL{ " " }
</button>
</div>
);
};
export default App;
|
App.css
body {
overflow : hidden ;
width : 100 vw;
height : 100 vh;
display : flex;
justify- content : center ;
align-items: center ;
background : linear-gradient( 180 deg, green , white );
}
.square-container {
display : grid;
width : 200px ;
height : 300px ;
border-radius: 50px ;
padding : 30px ;
gap: 20px ;
list-style : none ;
grid-template-rows: repeat ( 3 , 1 fr);
grid-template-columns: repeat ( 2 , 1 fr);
background : rgba( 255 , 255 , 255 , 0.2 );
}
. disc {
background : white ;
border-radius: 100% ;
justify- content : center ;
align-items: center ;
}
button {
text-decoration : none ;
display : inline- block ;
margin-left : 80px ;
border : none ;
color : white ;
padding : 15px 32px ;
text-align : center ;
font-size : 16px ;
font-weight : 900 ;
border-radius: 50px ;
background-color : #4caf50 ;
}
|
Step to Run Application: Run the application using the following command from the root directory of the project.
npm start
Output: Now open your browser and go to http://localhost:3000/, you will see the following output:
