Shine

A light that sweeps across an element, once, in a loop, on hover or on tap.

<script setup lang="ts">
import { Shine } from '@animate-ui/vue/primitives/effects/shine'
import { Button } from '@/components/ui/button'

withDefaults(
  defineProps<{
    delay?: number | string
    duration?: number | string
    loop?: boolean | string
    loopDelay?: number | string
    deg?: number | string
    enable?: boolean | string
    enableOnHover?: boolean | string
    enableOnTap?: boolean | string
  }>(),
  {
    delay: 0,
    duration: 1200,
    loop: true,
    loopDelay: 500,
    deg: -15,
    enable: true,
    enableOnHover: false,
    enableOnTap: false,
  },
)

const on = (value: boolean | string) => value === true || value === 'true'
</script>

<template>
  <Shine
    as-child
    :delay="Number(delay)"
    :duration="Number(duration)"
    :loop="on(loop)"
    :loop-delay="Number(loopDelay)"
    :deg="Number(deg)"
    :enable="on(enable)"
    :enable-on-hover="on(enableOnHover)"
    :enable-on-tap="on(enableOnTap)"
  >
    <Button size="lg">
      Get started
    </Button>
  </Shine>
</template>

Installation

npm install @animate-ui/vue motion-v
pnpm add @animate-ui/vue motion-v
yarn add @animate-ui/vue motion-v
bun add @animate-ui/vue motion-v

Usage

<script setup lang="ts">
import { Shine } from '@animate-ui/vue/primitives/effects/shine';
</script>

<template>
  <Shine as-child loop :loop-delay="500">
    <button>Get started</button>
  </Shine>
</template>

enable-on-hover and enable-on-tap play the shine on interaction instead of right away.

Animation

  • A skewed gradient of color (the text color by default) sweeps from left to right over duration (1.2s, cubic-bezier(0.4, 0, 0.2, 1)), clipped to the element. It never catches the pointer.
  • With loop, it sweeps again after loop-delay. With enable-on-hover and loop, it keeps sweeping while hovered.
  • It moves with a hardware-accelerated transform.
  • Under reduced motion, there is no shine: it's decorative.

API Reference

Shine

PropTypeDefault
as-child?
booleanfalse
color?
string'currentColor'
opacity?
number0.3
duration?
number1200
delay?
number0
loop?
booleanfalse
loop-delay?
number0
deg?
number-15
enable?
booleantrue
enable-on-hover?
booleanfalse
enable-on-tap?
booleanfalse
...props?
HTMLAttributes-

Built by Skyleen. The source code is available on GitHub.

Last updated: 10/23/2026