react-projectile-motion 抛物运动组件

✨ 效果在这里插入图片描述

👀️ 介绍

  • 本组件为抛物运动组件理论上运动轨迹可从页面的任意一点到另外任意一点
  • 适用场景包括小球飞入购物车,球类运动以及其他与抛物运动相关的特效
  • 支持用户自定义抛物运动的起始位置(startingDom)和 结束位置(endingDom)
  • 支持用户自定义抛掷物(projectile)
  • 支持用户自定义抛物运动结束回调函数
  • 支持用户自定义抛掷物击中结束位置(endingDom)后,结束位置(endingDom)的动画效果及回调函数
  • 抛掷物(projectile) 从 起始位置(startingDom)的中心位置开始出发 至 结束位置(endingDom)中心位置结束
    在这里插入图片描述

🔨 安装

npm install react-projectile-motion

❗依赖

pubsub-js v1.x及以上
react v16.8.0 及以上
react-dom v16.8.0 及以上

👻demo(可从demo中找到合适的配置项)

https://zhangxunjia.github.io/react-projectile-motion-demo/

✍️使用

本组件暴露两个高阶组件供用户使用分别为 withProjectileMotionStarterwithProjectileMotion

import { withProjectileMotionStarter, withProjectileMotion } from 'react-projectile-motion';

  • 高阶组件 withProjectileMotionStarter:

子组件获得函数 triggerProjectileMotion(subscription, startingDom) 用于触发抛物运动

triggerProjectileMotion(subscription, startingDom)函数详解:

参数说明类型默认值
subscription(必传)pubsub订阅名称 这里的传参须和withProjectileMotion中的props.subscription一致string
startingDom(必传)projectile起始位置的domobject(dom)
  • 高阶组件 withProjectileMotion:

子组件获得函数 setProjectileMotionPorps(props) 注意props是对象{} 用于设置抛物运动的属性

setProjectileMotionPorps(props) 函数详解:

参数说明类型默认值
props.subscription(必传)pubsub订阅名称 这里传参withProjectileMotionStarter中的subscription一致string
props.endingDom(必传)projectile结束位置的domobject(dom)
props.muiltipleProjectile是否允许出现多个projectilebooleantrue
props.projectileprojectile(如果要添加className需把样式写在全局)ReactNode
props.duration抛掷动画持续的时间(单位:秒)number1
props.zIndex设置projectile的zIndexnumber2147483647
props.needEndingDomAnimationendingDom是否需要被projectile击中后动画booleantrue
props.projectileMovmentEnd抛物运动动画结束回调function
props.endingDomAnimationEndendingDom被击中产生的动画的结束回调function
props.endingDomAnimationDurationendingDom被projectile击中后动画持续时间 (单位:秒)number
props.endingDomAnimationNameendingDom被projectile击中后的animation的名称(animation需定义在全局)string
props.additionalTransformValueInAnimate补充的动画的transform值,传入该值后会生成新的类名,该类会整合endingDomAnimationName对应的keyframe除最后一帧外的其他帧,形成新的类,然后供endingDom应用。可以设置rotate scale translate skew 等值,若设置多个请用空格隔开。(图解详情string
props.wrapClassNameprojectile外层容器的类名string
props.isInitialYAxisReverse抛物运动初速度y轴方向是否为反方向booleantrue
props.projectileTransition自定义projectile的transition属性若传入此属性则duration和isInitialYAxisReverse将失效string

⌨️使用示例:

抛物运动起始端:
// 抛物运动起始端
import React, { useRef } from 'react';
// 引入withProjectileMotionStarter
import { withProjectileMotionStarter } from 'react-projectile-motion';

const StartCom = (props) => {
    const startingDom = useRef();
    return (
        <div
            ref={startingDom} 
            onClick={() => {
              {/* 触发抛物运动 */}
              props.triggerProjectileMotion(
                {/* 这个subscriptionName 要和 结束端props.setProjectileMotionPorps中的subscriptionName 对应 */}
                'subscriptionName', 
                startingDom.current
              )
            }}
        >
            +
        </div>
    );
};

// 使用withProjectileMotionStarter
export default withProjectileMotionStarter(StartCom);
抛物运动结束端:
// 抛物运动结束端
import React, { useRef, useEffect } from 'react';

// 引入withProjectileMotion
import { withProjectileMotion } from 'react-projectile-motion';

const EndCom = (props) => {
    const endingDom = useRef();

    useEffect(() => {
        // 注意:接收参数为对象
        props.setProjectileMotionPorps({
            // 这个subscription 要和起始端中props.triggerProjectileMotion的subscriptionName对应
            subscription: 'subscriptionName',
            endingDom: endingDom.current,
        });
    }, []);

    return (
        <img
            ref={endingDom}
            src={require('./shopCar.png')}
            alt="shopcar"
        />
    );
};

// 使用withProjectileMotion
export default withProjectileMotion(EndCom);
  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值