Filp动画

简介: Filp动画基于First、Last、Inverse、Play四步实现复杂前端动画效果。首先记录元素初始位置,接着记录目标位置,然后使用transform属性将元素逆向平移回初始位置,最后通过移除transform并添加transition属性实现平滑动画效果。这是一种高效解决CSS不支持过渡动画问题的方法。

Filp动画

1.介绍

Filp动画是按照==FirstLastInversePlay==四大步骤(每个单词首字母组成Filp),它能够解决前端一些复杂的动画和一些不支持css过渡的动画。

2.实现逻辑

1.第一步(First)

​ 首先记录元素当前的位置。

// 首先获取元素的矩形位置信息。
// target_el = 目标元素

const elRect = target_el.getBoundingClientRect();
AI 代码解读
2.第二步(Last)

​ 记录元素要改变的目标位置的位置信息。

// 记录改变后目标元素的位置信息。
// 这里举例把目标元素插入到父元素的最后一个子元素。
// parent_el = 目标元素的父元素。
// last_el = 目标元素父元素的最后一个子元素。

// 将目标元素插入到最后一个元素的下一个元素节点。
parent_el.insertBefore(target_el,last_el.nextElementSibling);
// 记录元素改变后的位置信息。
const changedElRect = target_el.getBoundingClientRect();
AI 代码解读
3.第三步(Inverse)

​ 将改变位置后的元素通过tranform属性平移到改变位置之前==注意,此时的元素显示的还是改变位置之前的位置信息但实际上元素已经处于最后一个元素的位置上只是还未渲染出来==,此时我们通过transform的translateY属性根据之前记录的位置信息可以算出我们要平移多少px可以回到原点。

// 元素平移回到开始的位置。
// 平移量为开始位置减上改变之后的位置。
const y = elRect.top + changedElRect.top;
target_el.style.transform = `translateY(${
     y}px)`
AI 代码解读
4.第四步(play)

​ 此时元素在页面已经显示出来了,它会覆盖到第一个元素只上,此时我们通过移除transform属性再通过添加transition过渡属性让它有个动画去到改变后的位置。

// 在下一个渲染帧,移除transform属性播放动画。
requestAnimationFrame(()=>{
   
    target_el.style.transition = 'transform .3s ease-in-out';
    target_el.style.removeProperty('transform');
})
AI 代码解读

​ 此时元素会过渡到目标位置形成一个动画,这就是Filp动画的一个实现思路,这个Filp动画主要是提供一个思路,代码还得要自己去写,我这里只是简单的写了一下实现过程,想要完全掌握这个动画大家还需要自己去实现一些动画。

3.结语

Filp动画的思路还是挺值得我们学习的,在实现动画上也提供了很大的帮助,大家可以多学习一下,如果觉得我介绍的还可以的话可以关注我我以后会为大家介绍前端更多的知识和技巧等。

目录
打赏
0
1
1
0
79
分享
相关文章
不瞒了,我们和追光动画有一个《杨戬》!
不瞒了,我们和追光动画有一个《杨戬》!
243 0
An动画优化之遮罩层动画
An动画优化之遮罩层动画
339 0
第二十二章:动画(十)
你自己的缓和功能您可以轻松制作自己的缓动功能。所需要的只是一个类型为Func 的方法,它是一个带有double参数和double返回值的函数。这是一个传递函数:它应该为0的参数返回0,并且对于1的参数应该返回1.但是在这两个值之间,任何事情都会发生。
612 0
第二十二章:动画(九)
缓解功能你已经看过以下关键帧动画,它以一种方式摆动Button,然后是其他: async void OnButtonClicked(object sender, EventArgs args) { await button.RotateTo(90, 250); await button.RotateTo(-90, 500); await button.RotateTo(0, 250); } 但动画看起来并不合适。
1001 0
第二十二章:动画(八)
旋转和锚AnchorX和AnchorY属性为“缩放”和“旋转”属性设置缩放或旋转的中心,因此它们也会影响ScaleTo和RotateTo动画。CircleButton程序将一个Button旋转一个圆圈,但不像你之前看到的那样。
1004 0
第二十二章:动画(七)
Task.WhenAll和Task.WhenAny另一个强大的选项可让您以非常结构化的方式组合动画,而无需担心编译器警告。 Task类的静态Task.WhenAll和Task.WhenAny方法旨在同时运行多个异步方法。
1016 0
第二十二章:动画(六)
复合动画您可以混合等待和未等待的调用来创建复合动画。 例如,假设您希望按钮在大小扩展的同时旋转360度然后收缩。ViewExtensions类定义一个方法名称ScaleTo,它为Scale属性设置动画,就像RotateTo为Rotate属性设置动画一样。
1212 0
第二十二章:动画(五)
等待动画解决后续点击问题的另一种方法是在调用RotateTo之前初始化Rotation属性: void OnButtonClicked(object sender, EventArgs args) { button.Rotation = 0; button.RotateTo(360, 2000); } 现在,您可以在停止后再次点击按钮,它将从头开始动画。
1195 0