lumina-animate
v1.0.10
Published
React animation components library for floating elements
Downloads
41
Maintainers
Readme
LuminaFloating
一个React动画组件,可以在页面上生成浮动元素,如心形、星星等图片,然后朝目标元素飞去。
安装
npm install lumina-floating使用方法
import React, { useState } from 'react';
import { LuminaFloating } from 'lumina-floating';
import heartImage from './heart.png';
function App() {
const [isAnimating, setIsAnimating] = useState(false);
const [startPosition, setStartPosition] = useState({ x: 0, y: 0 });
const handleClick = (event) => {
if (isAnimating) return;
const rect = event.currentTarget.getBoundingClientRect();
setStartPosition({
x: rect.left,
y: rect.top
});
setIsAnimating(true);
};
const handleAnimationComplete = () => {
setIsAnimating(false);
};
return (
<div>
<button onClick={handleClick}>
点击触发动画
</button>
{isAnimating && (
<LuminaFloating
startX={startPosition.x}
startY={startPosition.y}
imageUrl={heartImage}
count={10}
onComplete={handleAnimationComplete}
>
<div className="target-element">
目标元素
</div>
</LuminaFloating>
)}
</div>
);
}属性
| 属性名 | 类型 | 默认值 | 描述 | |---|---|---|---| | startX | number | 必填 | 动画开始的X坐标 | | startY | number | 必填 | 动画开始的Y坐标 | | imageUrl | string | 必填 | 浮动元素的图片URL | | count | number | 10 | 浮动元素的数量 | | beatTime | number | 0.8 | 跳动动画的持续时间(秒) | | positiveSequence | boolean | false | 是否正序,false是倒序 | | randomOffsetX | number | 40 | 随机偏移量X轴,0是不偏移 | | randomOffsetY | number | 50 | 随机偏移量Y轴,0是不偏移 | | flyToTargetDuration | number | 0.8 | 飞向目标元素的动画时间(秒) | | jumpDelay | number | 0.3 | 跳动动画的随机延迟最大值(秒) | | flyDelay | number | 0.1 | 飞行动画的间隔时间(秒) | | jumpingAnimationClass | string | 'jumping-animation' | 自定义跳动动画类名 | | jumpingAnimationType | 1 | 2 | 1 | 动画类型:1=默认跳动,2=散开 | | flyToTargetClass | string | 'fly-to-target' | 自定义飞行动画类名 | | floatingItemClass | string | 'floating-item' | 自定义浮动元素类名 | | onComplete | () => void | undefined | 动画完成后的回调函数 | | children | ReactNode | 必填 | 子元素,将作为飞行目标 |
动画类型
组件支持两种动画类型:
- 默认跳动动画(
jumpingAnimationType={1}) - 散开动画(
jumpingAnimationType={2}),类似于钻石/金币收集效果
自定义样式
您可以通过传递自定义的CSS类名来修改动画样式:
<LuminaFloating
startX={startPosition.x}
startY={startPosition.y}
imageUrl={heartImage}
jumpingAnimationClass="my-jumping-animation"
flyToTargetClass="my-fly-animation"
floatingItemClass="my-floating-item"
>
<div className="target">目标</div>
</LuminaFloating>许可证
MIT
