Water Ripple Effect
nyxui/water-ripple-effectFreeComponent
A water ripple effect that that provide several effects.
Live preview
live · rendered by the registry
Rendered by shadcn/ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://nyxui.com/r/water-ripple-effect.jsonSource
1"use client";23import { useRef, useEffect } from "react";4import * as THREE from "three";56interface WaterRippleEffectProps {7 imageSrc: string;8 width?: number;9 height?: number;10 waveIntensity?: number;11 rippleIntensity?: number;12 animationSpeed?: number;13 hoverRippleMultiplier?: number;14 transitionSpeed?: number;15 className?: string;16 containerClassName?: string;17 scale?: number;18 waveFrequency?: number;19 rippleFrequency?: number;20 distortionAmount?: number;21 onHover?: () => void;22 onLeave?: () => void;23}2425export default function WaterRippleEffect({26 imageSrc,27 width = 920,28 height = 955,29 waveIntensity = 0.006,30 rippleIntensity = 0.012,31 animationSpeed = 1.0,32 hoverRippleMultiplier = 4.0,33 transitionSpeed = 0.08,34 className = "",35 containerClassName = "",36 scale = 1.0,37 waveFrequency = 10.0,38 rippleFrequency = 20.0,39 distortionAmount = 0.008,40 onHover,41 onLeave,42 ...props43}: WaterRippleEffectProps & React.HTMLAttributes<HTMLDivElement>) {44 const mountRef = useRef<HTMLDivElement>(null);45 const sceneRef = useRef<THREE.Scene | null>(null);46 const rendererRef = useRef<THREE.WebGLRenderer | null>(null);47 const materialRef = useRef<THREE.ShaderMaterial | null>(null);48 const mouseRef = useRef({ x: 0.5, y: 0.5 });49 const timeRef = useRef(0);50 const isHoveredRef = useRef(false);5152 useEffect(() => {53 const mountElement = mountRef.current;54 if (!mountElement) return;55 const scene = new THREE.Scene();56 const camera = new THREE.PerspectiveCamera(75, width / height, 0.1, 1000);57 const renderer = new THREE.WebGLRenderer({58 antialias: true,59 alpha: true,60 powerPreference: "high-performance",61 precision: "highp",62 });6364 renderer.setSize(width, height);65 renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));66 renderer.setClearColor(0x000000, 0);67 mountElement.appendChild(renderer.domElement);68 const textureLoader = new THREE.TextureLoader();69 const texture = textureLoader.load(imageSrc, (loadedTexture) => {70 loadedTexture.magFilter = THREE.LinearFilter;71 loadedTexture.minFilter = THREE.LinearMipmapLinearFilter;72 loadedTexture.wrapS = THREE.ClampToEdgeWrapping;73 loadedTexture.wrapT = THREE.ClampToEdgeWrapping;74 loadedTexture.generateMipmaps = true;75 loadedTexture.needsUpdate = true;76 });7778 const vertexShader = `79 varying vec2 vUv;80 varying vec2 vPosition;8182 void main() {83 vUv = uv;84// … truncated
What it pulls in
npm packages
Files it writes
More from shadcn/ui
All 68 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| 3D Layered Card3d-layered-card | shadcn/ui | Components | Free | 1 dep | |
| Animated Code Blockanimated-code-block | shadcn/ui | Components | Free | 3 deps | |
| Animated Grainy Backgroundanimated-grainy-bg | shadcn/ui | Components | Free | 1 dep | |
| Animated Textanimated-text | shadcn/ui | Components | Free | 1 dep | |
| Apple Glass Effectapple-glass-effect | shadcn/ui | Components | Free | 1 dep | |
| Bubble Backgroundbubble-background | shadcn/ui | Components | Free | no deps | |
| Custom Cursorcustom-cursor | shadcn/ui | Components | Free | 1 dep | |
| Cyberpunk Cardcyberpunk-card | shadcn/ui | Components | Free | no deps |
