Blame view

天文台pc/tianwentai-ui/node_modules/motion-dom/dist/es/projection/shared/stack.mjs 2.83 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  import { addUniqueItem, removeItem } from 'motion-utils';
  
  class NodeStack {
      constructor() {
          this.members = [];
      }
      add(node) {
          addUniqueItem(this.members, node);
          for (let i = this.members.length - 1; i >= 0; i--) {
              const member = this.members[i];
              if (member === node || member === this.lead || member === this.prevLead)
                  continue;
              const inst = member.instance;
              if ((!inst || inst.isConnected === false) && !member.snapshot) {
                  removeItem(this.members, member);
                  member.unmount();
              }
          }
          node.scheduleRender();
      }
      remove(node) {
          removeItem(this.members, node);
          if (node === this.prevLead)
              this.prevLead = undefined;
          if (node === this.lead) {
              const prevLead = this.members[this.members.length - 1];
              if (prevLead)
                  this.promote(prevLead);
          }
      }
      relegate(node) {
          for (let i = this.members.indexOf(node) - 1; i >= 0; i--) {
              const member = this.members[i];
              if (member.isPresent !== false && member.instance?.isConnected !== false) {
                  this.promote(member);
                  return true;
              }
          }
          return false;
      }
      promote(node, preserveFollowOpacity) {
          const prevLead = this.lead;
          if (node === prevLead)
              return;
          this.prevLead = prevLead;
          this.lead = node;
          node.show();
          if (prevLead) {
              prevLead.updateSnapshot();
              node.scheduleRender();
              const { layoutDependency: prevDep } = prevLead.options;
              const { layoutDependency: nextDep } = node.options;
              if (prevDep === undefined || prevDep !== nextDep) {
                  node.resumeFrom = prevLead;
                  if (preserveFollowOpacity)
                      prevLead.preserveOpacity = true;
                  if (prevLead.snapshot) {
                      node.snapshot = prevLead.snapshot;
                      node.snapshot.latestValues =
                          prevLead.animationValues || prevLead.latestValues;
                  }
                  if (node.root?.isUpdating)
                      node.isLayoutDirty = true;
              }
              if (node.options.crossfade === false)
                  prevLead.hide();
          }
      }
      exitAnimationComplete() {
          this.members.forEach((member) => {
              member.options.onExitComplete?.();
              member.resumingFrom?.options.onExitComplete?.();
          });
      }
      scheduleRender() {
          this.members.forEach((member) => member.instance && member.scheduleRender(false));
      }
      removeLeadSnapshot() {
          if (this.lead?.snapshot)
              this.lead.snapshot = undefined;
      }
  }
  
  export { NodeStack };
  //# sourceMappingURL=stack.mjs.map