动画(animation)明明设置为了只执行一次,却会偶发的再次被触发 #1492
Answered
by
wumail
xingzilong
asked this question in
Q&A
-
|
Beta Was this translation helpful? Give feedback.
Answered by
wumail
Feb 5, 2024
Replies: 2 comments 3 replies
-
调用toFront之后会重新渲染节点,所以动画会重新触发,你可以把控制台打开看看点击节点后DOM里发生了什么 |
Beta Was this translation helpful? Give feedback.
3 replies
-
被集成到了另一个项目里,我一时间剔除不出来。其实就是最简单的使用。
…---- 回复的原邮件 ----
| 发件人 | Lv.1 ***@***.***> |
| 日期 | 2024年02月04日 15:49 |
| 收件人 | ***@***.***> |
| 抄送至 | ***@***.***>***@***.***> |
| 主题 | Re: [didi/LogicFlow] 动画(animation)明明设置为了只执行一次,却会偶发的再次被触发 (Discussion #1492) |
可以给个demo吗,我研究一下
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you authored the thread.Message ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
这是两种不同的情况。在logicflow中,假如我们拖出两个不同类型的节点A和B,这时在DOM里AB同级,且顺序为AB,在点击A节点之后,A会被重新渲染,顺序变为BA,这是logicflow的渲染机制导致的,在代码中
https://github.com/didi/LogicFlow/blob/master/packages/core/src/view/Graph.tsx#L85
graphModel.sortElements是一个get方法,它会根据zIndex做排序,从而影响节点的渲染顺序
https://github.com/didi/LogicFlow/blob/master/packages/core/src/model/GraphModel.ts#L200
如果我们对节点的删除和添加做监听的话就可以发现,上面的操作会导致A节点(#html-node)的删除和添加
等同于
在这里,emerge动画是依照时间轴执行的,节点被「重新渲染」,时间轴重置了,动画自然也会重新执行
但是为节点添加class,并不会让对应的时间轴重置
以上是我的理解,可能有错误的地方,具体可以了解一下animation的机制以及完整的浏览器渲染机制,我也不太了解就不展开了。