> 웹 프론트엔드 > JS 튜토리얼 > Typescript, Tailwind 및 Framer Motion을 사용한 애니메이션 호버 로고

Typescript, Tailwind 및 Framer Motion을 사용한 애니메이션 호버 로고

Mary-Kate Olsen
풀어 주다: 2025-01-13 18:36:44
원래의
940명이 탐색했습니다.

Animated Hover Logo using Typescript, Tailwind and Framer Motion

정적 로고를 버튼으로 변환하여 모션 값을 사용하여 버튼 축을 따라 커서의 움직임을 따르는 비디오 툴팁을 활성화합니다.

자세히 살펴보면 마이크로 애니메이션을 사용하고 있음을 알 수 있습니다. 로고 위로 마우스를 가져가면 로고가 부드럽게 축소되고 페이드 아웃된 다음 페이드 인 효과로 확대되는 버튼으로 전환됩니다. 버튼 위로 마우스를 가져가면 비디오 도구 설명이 표시됩니다.

데모

소스 코드


logo-hover.tsx

<script> // Detect dark theme var iframe = document.getElementById('tweet-1878748540677283930-90'); if (document.body.className.includes('dark-theme')) { iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1878748540677283930&theme=dark" } </script>
"반응"에서 가져오기 { useState, useCallback };
"프레이머 모션"에서 { 모션, AnimatePresence, useMotionValue } 가져오기;
"lucide-react"에서 { Play }를 가져옵니다.

기본 함수 내보내기 LogoHover() {
  const [isHovered, setIsHovered] = useState(false);
  const [showVideo, setShowVideo] = useState(false);
  const x = useMotionValue(0);

  const handlerMouseMove = useCallback(
    (이벤트: React.MouseEvent<HTMLElement>) => {
      const halfWidth = event.currentTarget.offsetWidth / 2;
      x.set(event.nativeEvent.offsetX - halfWidth);
    },
    [엑스]
  );

  반품 (
    <div className="relative w-[100px] h-[80px] 커서 포인터" onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)}>
      <AnimatePresence>
        {!isHovered && (
          // 자신의 로고로 변경
          <motion.img src="/theo-logo.png" alt="Wegic Logo" className="absolute inset-0 w-full h-full object-contain" 초기={{ 불투명도: 1, 크기: 1 } } 종료={{ 불투명도: 0, 크기: 0.8 }} 전환={{ 지속 시간: 0.2 }} />
        )}
      </AnimatePresence>

      <AnimatePresence>
        {isHovered && (
          <motion.div className="absolute inset-0 flex items-center justify-center w-full" 초기={{ 불투명도: 0 }} animate={{ 불투명도: 1 }} 종료={{ 불투명도: 0, 크기 : 0.8 }} 전환={{ 기간: 0.2 }}>
            <버튼
              className="flex w-full items-center justify-center gap-2 bg-white border border-black h-10 py-2 rounded-md"
              onMouseMove={handleMouseMove}
              onMouseEnter={() => setShowVideo(true)}
              onMouseLeave={() => setShowVideo(false)}
            >
              <재생 크기={16} fill="white" 스트로크Width={2} aria-hidden="true" />
              <p className="text-[10px] flexfont-semibold">동영상 보기</p>
            </버튼>
          </motion.div>
        )}
      </AnimatePresence>
      {/* 동영상 도움말 */}
      <AnimatePresence mode="popLayout">
        {쇼동영상 && (
          <motion.div
            초기={{ 불투명도: 0, y: 20, 배율: 0.6 }}
            애니메이션={{
              불투명도: 1,
              y: 0,
              규모: 1,
              이행: {
                강성: 260,
                댐핑: 10,
                지속시간: 0.3,
              },
              너비: "200px",
              높이: "자동",
            }}
            종료={{ 불투명도: 0, y: 20, 배율: 0.6 }}
           >




          

            
        
로그인 후 복사

위 내용은 Typescript, Tailwind 및 Framer Motion을 사용한 애니메이션 호버 로고의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿