Inline animated tv static image

This commit is contained in:
shamoon 2023-10-16 12:14:39 -07:00
parent ae99eeb32b
commit 2f4e4854b6

View File

@ -1,16 +1,37 @@
import Image from "next/image"; import Image from "next/image";
import { useState } from 'react';
export default function Component({ service }) { export default function Component({ service }) {
const { widget } = service; const { widget } = service;
const { stream, fit = "contain" } = widget; const { stream, fit = "contain" } = widget;
const [src, setImgSrc] = useState(stream);
return ( return (
<div> <div>
<style>{`
.tv-static img {
display: none !important;
}
.tv-static {
margin: auto;
background-image: repeating-radial-gradient(circle at 17% 32%, white, black 0.00085px);
animation: tv-static 5s linear infinite;
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
@keyframes tv-static {
from {
background-size: 100% 100%;
}
to {
background-size: 200% 200%;
}
}
`}</style>
<div className="absolute top-0 bottom-0 right-0 left-0"> <div className="absolute top-0 bottom-0 right-0 left-0">
<Image layout="fill" objectFit="fill" className="blur-md" src={src} alt="stream" onError={() => setImgSrc('https://images.unsplash.com/photo-1610337673044-720471f83677?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1972&q=80')} /> <Image layout="fill" objectFit="fill" className="blur-md" src={stream} alt="stream" onError={(e) => {e.target.parentElement.parentElement.className='tv-static'}} />
<Image layout="fill" objectFit={fit} className="drop-shadow-2xl" src={src} alt="stream" onError={() => setImgSrc('https://images.unsplash.com/photo-1610337673044-720471f83677?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1972&q=80')} /> <Image layout="fill" objectFit={fit} className="drop-shadow-2xl" src={stream} alt="stream" />
</div> </div>
<div className="absolute top-0 right-0 bottom-0 left-0 overflow-clip shadow-[inset_0_0_200px_#000] shadow-theme-700/10 dark:shadow-theme-900/10" /> <div className="absolute top-0 right-0 bottom-0 left-0 overflow-clip shadow-[inset_0_0_200px_#000] shadow-theme-700/10 dark:shadow-theme-900/10" />
<div className="h-[68px] overflow-clip" /> <div className="h-[68px] overflow-clip" />