Docs

Clock With Photo

A widget to display clock with photo

requires interactionhover

Installation

Run the following command

It will create a new file called clock-with-photo.tsx inside the components/animata/widget directory.

mkdir -p components/animata/widget && touch components/animata/widget/clock-with-photo.tsx

Paste the code

Open the newly created file and paste the following code:

/* eslint-disable @next/next/no-img-element */
"use client";
 
import { useEffect, useState } from "react";
 
import { absoluteUrl, cn } from "@/lib/utils";
 
const getTime = () => {
  const now = new Date();
  const hours = now.getHours();
  const minutes = now.getMinutes();
 
  return {
    hoursTens: Math.floor(hours / 10),
    hoursOnes: hours % 10,
    minutesTens: Math.floor(minutes / 10),
    minutesOnes: minutes % 10,
  };
};
 
export default function ClockWithPhoto() {
  const [time, setTime] = useState(getTime());
 
  useEffect(() => {
    let timeout: NodeJS.Timeout;
    const updateTime = () => {
      const now = new Date();
      const secondsUntilNextMinute = 60 - now.getSeconds();
      setTime(getTime());
      timeout = setTimeout(updateTime, secondsUntilNextMinute * 1000);
    };
 
    updateTime();
 
    return () => clearTimeout(timeout);
  }, []);
 
  return (
    <div className="group relative h-52 w-52 gap-2 overflow-hidden rounded-3xl">
      <div className="relative flex h-full w-full items-center">
        <img
          src="https://images.unsplash.com/photo-1592205644721-2fe5214762ae?q=80&w=600&auto=format&fit=crop&ixlib=rb-4.0.3"
          alt="Background"
          className="h-full w-full rounded-3xl object-cover transition-all group-hover:scale-105 group-hover:blur-[1px]"
        />
        <img
          src={absoluteUrl("/jumping-man.png")}
          alt="Your photo"
          className="absolute left-0 top-0 z-20 mt-2 h-48 w-44 p-2 transition-all duration-500 group-hover:translate-x-full group-hover:opacity-0"
        />
      </div>
      <div
        className={cn(
          "absolute right-0 top-0 z-10 flex h-full w-fit flex-col items-center justify-center text-8xl font-black tabular-nums tracking-tighter text-white transition-all duration-500 group-hover:right-1/4",
        )}
      >
        <div className="flex">
          <div>{time.hoursTens}</div>
          <div>{time.hoursOnes}</div>
        </div>
        <div className="flex">
          <div>{time.minutesTens}</div>
          <div>{time.minutesOnes}</div>
        </div>
      </div>
    </div>
  );
}

Credits

Built by Aashish Katila

Photo by Warren on Unsplash Photo by Hongru Wang on Unsplash