diff --git a/src/App.css b/src/App.css index 5e4ac4c..cdf2347 100644 --- a/src/App.css +++ b/src/App.css @@ -40,7 +40,6 @@ main { height: 100%; display: flex; gap: 1em; - background-size: cover; justify-content: center; align-items: center; } @@ -102,6 +101,8 @@ img { img { height: 100%; + animation: fadeImage 0.5s; + animation-fill-mode: forwards; } } @@ -131,3 +132,48 @@ img { .overlay:hover { opacity: 1; } + +@keyframes fadeImage { + from { + filter: blur(5rem); + } + + to { + filter: blur(0); + } +} + +@keyframes fadeBg { + from { + opacity: 0; + filter: blur(5rem); + } + + to { + opacity: 1; + filter: blur(0); + } +} + +#background { + position: absolute; + width: 100%; + height: 100%; + z-index: -1; + + img { + width: 100%; + aspect-ratio: 16/9; + position: absolute; + } +} + +#current-bg { + z-index: -1; + animation: fadeBg 1s; + animation-fill-mode: forwards; +} + +#previous-bg { + z-index: -2; +} diff --git a/src/App.tsx b/src/App.tsx index 8c35890..398f8f1 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,7 +2,7 @@ import './defaults.css' import './App.css' import './spinner.css' import { MovieWall } from './objects/movie-wall' -import { useState, useEffect } from 'react' +import React, { useState, useEffect } from 'react' import tmdb from './objects/tmdb' import { Sidebar } from './objects/sidebar' import { Movie } from './objects/movie-wall' @@ -28,36 +28,56 @@ function App() { page: 1 }) const [movies, setMovies] = useState([new MovieClass()]) - const [backdrop, setBackdrop] = useState("") + const [backdrop, setBackdrop] = useState({ currImg: "", prevImg: "" }) const [chosenMovie, setChosenMovie] = useState(new MovieClass()) - const [loadedMovies, setLoadedMovies] = useState(0) const [similarMoviesAvailable, setSimilarMoviesAvailable] = useState(true) useEffect(() => { tmdb.getPopular(config, setMovies) }, []) useEffect(() => { - setLoadedMovies(movies.length) - if (movies[0].backdrop_path) { - const bgString = "linear-gradient(rgba(0, 0, 0, 0.5),rgba(0, 0, 0, 0.5)), " + tmdb.makeBgImgUrl(chosenMovie.backdrop_path ? chosenMovie.backdrop_path : movies[0].backdrop_path) - setBackdrop(bgString) + if (chosenMovie.backdrop_path) { + const bgString = tmdb.makeBgImgUrl(chosenMovie.backdrop_path) + setBackdrop(prev => { + console.log("NEW PREVIMG: " + prev.currImg) + console.log("NE CURRIMG: " + bgString) + return { + prevImg: prev.currImg, + currImg: bgString + } + }) + } else { + setBackdrop(prev => { + return { + ...prev, + currImg: tmdb.makeBgImgUrl(movies[0]?.backdrop_path ?? "") + } + }) } }, [movies]) - useEffect(() => { console.log("SIMILAR AVAILABLE: " + similarMoviesAvailable) }, [similarMoviesAvailable]) + interface BackgroundProps extends React.ComponentPropsWithRef<"div"> { + currImg: string; + prevImg: string; + } + const Background = (props: BackgroundProps) => { + return