lightswind
Version:
A modern frontend library with pre-built Tailwind CSS components for building responsive and interactive user interfaces.
100 lines (85 loc) • 3.31 kB
JSX
import React, { useEffect, useState } from "react";
const StickyBar = () => {
const [timeLeft, setTimeLeft] = useState({
hours: "00",
minutes: "00",
seconds: "00",
});
useEffect(() => {
const targetTime = new Date().getTime() + 2 * 60 * 60 * 1000;
const updateCountdown = () => {
const now = new Date().getTime();
const remainingTime = targetTime - now;
if (remainingTime <= 0) {
setTimeLeft({ hours: "00", minutes: "00", seconds: "00" });
return;
}
const hours = Math.floor(
(remainingTime % (24 * 60 * 60 * 1000)) / (60 * 60 * 1000)
);
const minutes = Math.floor(
(remainingTime % (60 * 60 * 1000)) / (60 * 1000)
);
const seconds = Math.floor((remainingTime % (60 * 1000)) / 1000);
setTimeLeft({
hours: String(hours).padStart(2, "0"),
minutes: String(minutes).padStart(2, "0"),
seconds: String(seconds).padStart(2, "0"),
});
};
const interval = setInterval(updateCountdown, 1000);
return () => clearInterval(interval); // Clean up interval on component unmount
}, []);
return (
<section className="bg-gradient-to-r from-indigo-500 via-purple-500 to-pink-500 shadow-lg font-primarylw">
<div className="relative px-6 py-3 sm:py-4 lg:py-5">
<div className="flex items-center justify-between pr-10">
<p className="text-xs font-medium text-white sm:text-sm lg:text-base">
Save 50%! on every purchase, Offer ends in
</p>
<div
id="countdown"
className="countdown flex items-center gap-1 text-xs font-medium text-white sm:gap-2 sm:text-sm"
>
<span className="rounded-md bg-white/20 px-2 py-1 sm:px-3 sm:py-2">
{timeLeft.hours}
</span>
<span>:</span>
<span className="rounded-md bg-white/20 px-2 py-1 sm:px-3 sm:py-2">
{timeLeft.minutes}
</span>
<span>:</span>
<span className="rounded-md bg-white/20 px-2 py-1 sm:px-3 sm:py-2">
{timeLeft.seconds}
</span>
</div>
<a
href="javascript:void(0)"
className="hidden text-xs font-medium text-white underline sm:block sm:text-sm lg:text-base hover:text-white/90"
>
Shop Now →
</a>
</div>
<button className="absolute right-3 top-1/2 -translate-y-1/2 flex h-8 w-8 items-center justify-center rounded-full bg-white/10 text-white/70 hover:bg-white/20 hover:text-white z-10">
<svg
width="16"
height="16"
viewBox="0 0 16 16"
fill="none"
xmlns="http://www.w3.org/2000/svg"
>
<path
d="M1.14288 1.14285L8.00003 8M8.00003 8L14.8572 14.8571M8.00003 8L14.8572 1.14285M8.00003 8L1.14288 14.8571"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
/>
</svg>
</button>
</div>
</section>
);
};
export default StickyBar;
// export default StickyBar