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();
2.第二步(Last)

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

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

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

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

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

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

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

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

3.结语

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

相关文章
|
1月前
|
JavaScript 开发者
HarmonyNext动画大全03-帧动画
HarmonyNext动画大全03-帧动画
20 2
|
11月前
|
图形学 iOS开发
Unity——动效与缓动动画
Unity——动效与缓动动画
149 0
|
前端开发
CSS动画篇之404动画
CSS动画篇之404动画
156 0
|
存储 文件存储 云计算
不瞒了,我们和追光动画有一个《杨戬》!
不瞒了,我们和追光动画有一个《杨戬》!
194 0
An动画优化之遮罩层动画
An动画优化之遮罩层动画
267 0
An动画优化之遮罩层动画
|
图形学
unity动画之帧动画使用
使用unity实现lol寒冰帧动画
unity动画之帧动画使用
|
JavaScript 前端开发 开发者
动画-钩子函数实现小球半场动画|学习笔记
快速学习动画-钩子函数实现小球半场动画
133 0
动画-钩子函数实现小球半场动画|学习笔记
|
前端开发
动画
动画
139 0
|
前端开发
2、CSS动画——拳皇动画实现
2、CSS动画——拳皇动画实现
125 0
2、CSS动画——拳皇动画实现