SparkUI

Text Gradient Onhover

The Text Gradient On-Hover Effect is a visually striking UI feature that dynamically transforms the appearance of text when hovered over, applying a vibrant gradient effect. Built using modern web technologies, this effect enhances the visual appeal of your website, making text elements more engaging and interactive for users.

Features :

  • Smooth Transition: The gradient effect smoothly transitions as users hover over text, creating a visually pleasing experience.
  • Customizable Colors: Easily customizable gradient colors to match the branding and theme of your website.
  • Subtle Animation: The effect is subtle yet noticeable, drawing attention to key text elements without overwhelming the user.
  • Lightweight Implementation: Designed to be lightweight, ensuring quick load times and minimal impact on performance.
  • Cross-Browser Compatibility: Works seamlessly across all major browsers, ensuring a consistent user experience.
  • SparkUI
    Copy the Source code`components/ui/text-gradient-onhover.jsx`
    
    import React, { useRef, useEffect, useState } from 'react';
    
    const TextSVG = ({ text }) => {
      const svgRef = useRef(null);
      const textRef = useRef(null);
      const [cursor, setCursor] = useState({ x: 0, y: 0 });
      const [gradientCenter, setGradientCenter] = useState({ cx: "50%", cy: "50%" });
      const [isHovered, setIsHovered] = useState(false);
    
      useEffect(() => {
        const handleMouseMove = (e) => {
          setCursor({ x: e.clientX, y: e.clientY });
        }
        window.addEventListener('mousemove', handleMouseMove);
    
        return () => {
          window.removeEventListener('mousemove', handleMouseMove);
        };
      }, []);
    
      useEffect(() => {
        if (svgRef.current && cursor.x !== null && cursor.y !== null) {
          const svgRect = svgRef.current.getBoundingClientRect();
          const cxPercentage = ((cursor.x - svgRect.left) / svgRect.width) * 100;
          const cyPercentage = ((cursor.y - svgRect.top) / svgRect.height) * 100;
          setGradientCenter({
            cx: `${cxPercentage}%`,
            cy: `${cyPercentage}%`,
          });
        }
      }, [cursor]);
    
      return (
        <svg
          ref={svgRef}
          width="100%"
          height="100%"
          viewBox="0 0 300 100"
          xmlns="http://www.w3.org/2000/svg"
        >
          <defs>
          <radialGradient
            id="multiColorGradient"
            gradientUnits="userSpaceOnUse"
            r="15%"
            cx={gradientCenter.cx}
            cy={gradientCenter.cy}
          >
            // you can edit the stopColor to change the gradient effect
            {isHovered && (
              <>
                <stop offset="40%" stopColor="#FFFF00" stopOpacity="0.75" />
                <stop offset="60%" stopColor="#FFFF00" stopOpacity="0.50" />
                <stop offset="80%" stopColor="#FFFF50" stopOpacity="0.25" />
                <stop offset="90%" stopColor="#FFFF50" stopOpacity="0.2" />
              </>
            )}
            <stop offset="100%" stopColor="#404040" stopOpacity="0.75"/>
          </radialGradient>
          </defs>
          <text
            ref={textRef}
            x="50%"
            y="50%"
            textAnchor="middle"
            dominantBaseline="middle"
            fontSize="40"
            fill="none"
            stroke="url(#multiColorGradient)"
            strokeWidth="0.5"
            style={{ cursor: 'none' }}
            onMouseEnter={() => setIsHovered(true)}
            onMouseLeave={() => setIsHovered(false)}
          >
            {text}
          </text>
        </svg>
      );
    };
    
    export default TextSVG;
    
      
    SparkUI