import { useMotionValueEvent } from "./use-motion-value-event.mjs"; import { frame, motionValue } from "motion-dom"; //#region src/value/use-velocity.ts /** * 创建一个 MotionValue,当提供的 MotionValue 速度变化时更新 * * ```javascript * const x = useMotionValue(0) * const xVelocity = useVelocity(x) * const xAcceleration = useVelocity(xVelocity) * ``` * * @public */ function useVelocity(value) { const velocity = motionValue(value.getVelocity()); const updateVelocity = () => { const latest = value.getVelocity(); velocity.set(latest); /** * 如果还有速度,安排下一帧继续检查直到速度为零 */ if (latest) frame.update(updateVelocity); }; useMotionValueEvent(value, "change", () => { frame.update(updateVelocity, false, true); }); return velocity; } //#endregion export { useVelocity };