motion-v
Version:
<h1 align="center"> <img width="35" height="35" alt="Motion logo" src="https://github.com/user-attachments/assets/00d6d1c3-72c4-4c2f-a664-69da13182ffc" /><br />Motion for Vue</h1>
18 lines (17 loc) • 583 B
JavaScript
import { cancelFrame, frame } from "motion-dom";
import { onBeforeUpdate, onUnmounted } from "vue";
function useAnimationFrame(callback) {
let initialTimestamp = 0;
const provideTimeSinceStart = ({ timestamp, delta }) => {
if (!initialTimestamp) initialTimestamp = timestamp;
callback(timestamp - initialTimestamp, delta);
};
const cancel = () => cancelFrame(provideTimeSinceStart);
onBeforeUpdate(() => {
cancel();
frame.update(provideTimeSinceStart, true);
});
onUnmounted(() => cancel());
frame.update(provideTimeSinceStart, true);
}
export { useAnimationFrame };