Blame view

天文台pc/tianwentai-ui/node_modules/framer-motion/dist/es/utils/use-instant-transition.mjs 1.7 KB
bc518174   王天杨   提交两个项目文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  "use client";
  import { frame } from 'motion-dom';
  import { MotionGlobalConfig } from 'motion-utils';
  import { useRef, useEffect } from 'react';
  import { useInstantLayoutTransition } from '../projection/use-instant-layout-transition.mjs';
  import { useForceUpdate } from './use-force-update.mjs';
  
  function useInstantTransition() {
      const [forceUpdate, forcedRenderCount] = useForceUpdate();
      const startInstantLayoutTransition = useInstantLayoutTransition();
      const unlockOnFrameRef = useRef(-1);
      useEffect(() => {
          /**
           * Unblock after two animation frames, otherwise this will unblock too soon.
           */
          frame.postRender(() => frame.postRender(() => {
              /**
               * If the callback has been called again after the effect
               * triggered this 2 frame delay, don't unblock animations. This
               * prevents the previous effect from unblocking the current
               * instant transition too soon. This becomes more likely when
               * used in conjunction with React.startTransition().
               */
              if (forcedRenderCount !== unlockOnFrameRef.current)
                  return;
              MotionGlobalConfig.instantAnimations = false;
          }));
      }, [forcedRenderCount]);
      return (callback) => {
          startInstantLayoutTransition(() => {
              MotionGlobalConfig.instantAnimations = true;
              forceUpdate();
              callback();
              unlockOnFrameRef.current = forcedRenderCount + 1;
          });
      };
  }
  function disableInstantTransitions() {
      MotionGlobalConfig.instantAnimations = false;
  }
  
  export { disableInstantTransitions, useInstantTransition };
  //# sourceMappingURL=use-instant-transition.mjs.map