Files
SnowLuma/.pnpm-store/v11/files/dc/c72089f1452171a11a6c6ffa949b5d5a5cc77bd1e2705bafc634bdabc49ded8ff3b70dce70fad01b6c91a7def82aa588c9db6f49581e00f5954f07a66904d5
T
TanTan 2a69b23b47
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

39 lines
1.4 KiB
Plaintext

import { observeTimeline } from 'motion-dom';
import { canUseNativeTimeline } from './utils/can-use-native-timeline.mjs';
import { getTimeline } from './utils/get-timeline.mjs';
import { offsetToViewTimelineRange } from './utils/offset-to-range.mjs';
function attachToAnimation(animation, options) {
const timeline = getTimeline(options);
const range = options.target
? offsetToViewTimelineRange(options.offset)
: undefined;
/**
* Use native timeline when:
* - No target: ScrollTimeline (existing behaviour)
* - Target with mappable offset: ViewTimeline with named range
* - Target with unmappable offset: fall back to JS observe
*/
const useNative = options.target
? canUseNativeTimeline(options.target) && !!range
: canUseNativeTimeline();
return animation.attachTimeline({
timeline: useNative ? timeline : undefined,
...(range &&
useNative && {
rangeStart: range.rangeStart,
rangeEnd: range.rangeEnd,
}),
observe: (valueAnimation) => {
valueAnimation.pause();
return observeTimeline((progress) => {
valueAnimation.time =
valueAnimation.iterationDuration * progress;
}, timeline);
},
});
}
export { attachToAnimation };
//# sourceMappingURL=attach-animation.mjs.map