PixelFlicker

Broken-neon-sign opacity flicker loop for retro signage and emphasis.

  • Stepped opacity flicker that mimics a broken neon sign
  • Configurable duration and repeat count
  • Trigger modes: mount, hover, click, focus, inView, or controlled
  • Signals the end of its last iteration: onComplete (React), @complete (Vue), (complete) (Angular)
  • Respects prefers-reduced-motion automatically
Status
stable
Category
animations
Since
v1.6.0

API

import { PixelFlicker } from '@pxlkit/ui-kit';
PropTypeDefaultDescription
children (required)React.ReactNode—Content to flicker.
durationnumber2200Animation duration in milliseconds. Default 2200.
repeatnumber | 'infinite''infinite'Iteration count: a number or 'infinite'. Default 'infinite'.
trigger'mount' | 'hover' | 'click' | 'focus' | 'inView' | boolean'mount'When the animation should play. Default 'mount'.
onComplete() => void—Fires after the final iteration.
classNamestring—Extra class names applied to the wrapping <div>.

ref points to <div>.

Accessibility

WCAG target: 2.1 AA

  • respects prefers-reduced-motion

Animation is suppressed when the user has requested reduced motion.

Usage

import { PixelFlicker } from '@pxlkit/ui-kit';

export function Default() {
  return (
    <PixelFlicker>
      <span>OPEN 24/7</span>
    </PixelFlicker>
  );
}

Examples

Default

import { PixelFlicker } from '@pxlkit/ui-kit';

export function Default() {
  return (
    <PixelFlicker>
      <span>OPEN 24/7</span>
    </PixelFlicker>
  );
}

Faster Flicker

import { PixelFlicker } from '@pxlkit/ui-kit';

export function FasterFlicker() {
  return (
    <PixelFlicker duration={900}>
      <span>NEON</span>
    </PixelFlicker>
  );
}

Hover Trigger

import { PixelFlicker } from '@pxlkit/ui-kit';

export function HoverTrigger() {
  return (
    <PixelFlicker trigger="hover" repeat={1}>
      <span>Hover me</span>
    </PixelFlicker>
  );
}

Related