diff --git a/chaosweb-v@2/src/App.jsx b/chaosweb-v@2/src/App.jsx index bb86be6..2226f83 100644 --- a/chaosweb-v@2/src/App.jsx +++ b/chaosweb-v@2/src/App.jsx @@ -11,6 +11,7 @@ import ChaosMania from "./pages/ChaosMania"; import ButtonCollection from "./pages/ButtonCollection"; import { useState } from "react"; import JumpScareEffect from "./components/JumpScareEffect"; +import BarrelRoll from "./pages/BarrelRoll"; function App() { const [trigger, setTrigger] = useState(false); @@ -40,6 +41,7 @@ function App() { } /> } /> } /> + } /> diff --git a/chaosweb-v@2/src/components/navbar.jsx b/chaosweb-v@2/src/components/navbar.jsx index e577ef0..34f13fa 100644 --- a/chaosweb-v@2/src/components/navbar.jsx +++ b/chaosweb-v@2/src/components/navbar.jsx @@ -1662,6 +1662,9 @@ const Navbar = () => {
{/* This will render the button */}
+
handleNavigate("/barrelroll")}> + Do a Barrel Roll +
handleNavigate("/maze")}> Maze Game
diff --git a/chaosweb-v@2/src/pages/BarrelRoll.css b/chaosweb-v@2/src/pages/BarrelRoll.css new file mode 100644 index 0000000..542f5c4 --- /dev/null +++ b/chaosweb-v@2/src/pages/BarrelRoll.css @@ -0,0 +1,95 @@ +/* App.css */ +@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@700&display=swap'); + +body, html { + margin: 0; + padding: 0; + height: 100%; + font-family: 'Roboto', sans-serif; +} + +.App { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + min-height: 100vh; + background: linear-gradient(135deg, #ff4d4d, #ffbe76); + overflow: hidden; + transition: transform 2s ease-in-out; +} + +@keyframes barrel-roll { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +.barrel-roll { + animation: barrel-roll 2s ease-in-out forwards; +} + +.title { + font-size: 3rem; + color: white; + text-align: center; + animation: fadeIn 2s ease-in-out; +} + +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +.instructions { + font-size: 1.2rem; + color: #fff; + margin: 20px; + text-align: center; + max-width: 80%; + animation: fadeIn 3s ease-in-out; +} + +.button { + padding: 15px 30px; + font-size: 1.2rem; + color: #ffbe76; + background-color: #2c3e50; + border: none; + border-radius: 10px; + cursor: pointer; + transition: transform 0.3s ease, background-color 0.3s ease; +} + +.button:hover { + background-color: #1abc9c; + transform: scale(1.1); +} + +.star { + position: absolute; + width: 10px; + height: 10px; + background-color: #fff; + border-radius: 50%; + animation: float 4s ease-in-out infinite; +} + +@keyframes float { + 0% { + transform: translateY(0) translateX(0); + } + 50% { + transform: translateY(-20px) translateX(10px); + } + 100% { + transform: translateY(0) translateX(0); + } +} diff --git a/chaosweb-v@2/src/pages/BarrelRoll.jsx b/chaosweb-v@2/src/pages/BarrelRoll.jsx new file mode 100644 index 0000000..35464b0 --- /dev/null +++ b/chaosweb-v@2/src/pages/BarrelRoll.jsx @@ -0,0 +1,37 @@ +import React, { useState, useEffect } from 'react'; +import "./BarrelRoll.css" +function BarrelRoll() { + const [roll, setRoll] = useState(false); + + const handleBarrelRoll = () => { + setRoll(true); + setTimeout(() => setRoll(false), 2000); + }; + + const createStars = () => { + const stars = []; + for (let i = 0; i < 20; i++) { + const starStyle = { + top: `${Math.random() * 100}vh`, + left: `${Math.random() * 100}vw`, + animationDuration: `${Math.random() * 3 + 2}s`, + animationDelay: `${Math.random() * 2}s` + }; + stars.push(
); + } + return stars; + }; + + return ( +
+
Do a Barrel Roll!
+
+ Press the button below to spin the entire page. Enjoy the cosmic journey! +
+ + {createStars()} +
+ ); +} + +export default BarrelRoll; diff --git a/chaosweb-v@2/src/pages/home.jsx b/chaosweb-v@2/src/pages/home.jsx index c7c94b3..02189a4 100644 --- a/chaosweb-v@2/src/pages/home.jsx +++ b/chaosweb-v@2/src/pages/home.jsx @@ -1,13 +1,23 @@ -import React from "react"; -import Navbar from "../components/navbar"; -import BouncingDiv from "./BouncingDiv"; +// Home.jsx +import React, { useState } from 'react'; +import Navbar from '../components/navbar'; +import BouncingDiv from './BouncingDiv'; +import BarrelRoll from './BarrelRoll'; +import "./BarrelRoll.css" + const Home = () => { + const [roll, setRoll] = useState(false); + + const handleBarrelRoll = () => { + setRoll(true); + setTimeout(() => setRoll(false), 2000); + }; + return ( - <> +
- - - + +
); };