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

目录
相关文章
|
canal 存储 SQL
MySQL 与 Redis 缓存的同步方案
本文介绍MySQL与Redis缓存的同步的两种方案 方案1:通过MySQL自动同步刷新Redis,MySQL触发器+UDF函数实现 方案2:解析MySQL的binlog实现,将数据库中的数据同步到Redis 一、方案1(UDF)
MySQL 与 Redis 缓存的同步方案
|
监控 BI Sentinel
十分钟搞懂阿里Sentinel核心源码
本文深入解析了Sentinel限流功能的实现,基于2.0.0-alpha2-SNAPSHOT版本。文章从数据统计、核心结构到具体案例,详细讲解了Sentinel如何通过责任链模式串联不同Slot,实现流量控制、系统保护等功能。重点分析了StatisticNode、ArrayMetric等关键类的实现原理,以及ContextUtil、SphU等核心组件的源码逻辑。同时探讨了滑动窗口机制、并发计数器和BlockException处理等内容,帮助读者全面理解Sentinel的内部工作机制。
1038 76
十分钟搞懂阿里Sentinel核心源码
|
存储 JavaScript 前端开发
JS 数组操作的利器:splice() 和 slice() 方法详解
JS 数组操作的利器:splice() 和 slice() 方法详解
477 0
|
缓存 网络协议 Shell
ADB各种操作指令详解大汇总
这篇文章提供了ADB(Android Debug Bridge)的详细操作指令汇总,包括设备管理、应用操作、日志查看、文件操作、屏幕截取与录制、Shell命令使用等。
1874 2
|
11月前
|
Prometheus 监控 Cloud Native
调用淘宝 API 时如何处理错误信息?
调用淘宝API时,需熟悉其错误码体系,处理客户端(如参数错误、权限不足)和服务器(如内部错误、网络问题)错误,编写错误处理逻辑,并进行充分测试与监控,确保API调用稳定可靠。
|
11月前
|
移动开发 安全 API
阿里云最新域名注册及续费和转入收费价格表参考
目前域名注册管理机构(Verisign)已上调.com中英文域名成本,这一变动将直接影响到全球范围内.com域名价格,各大注册商的.com域名注册、续费、转移价格已同步上涨。以阿里云为例,此次涨价之后,.com英文域名的注册价格由原来的78元涨价到了83元,续费价格也涨到了90元,下面是2024年9月1日涨价之后,阿里云最新的域名注册及续费和转入最新收费价格表。
|
小程序 前端开发 开发者
调用第三方接口微信登录接口
该文档介绍了调用微信登录接口的需求和实现思路。当用户尝试访问需要登录的页面时,若未登录则弹出微信登录选项。登录过程涉及微信小程序的wx.login()方法获取临时凭证code,并将其发送到服务器,服务器通过此code换取用户的OpenID、UnionID和session_key。依据这些信息,服务器可生成自定义登录态以识别用户身份。参考微信官方文档和登录流程图进行实现。
725 9
|
人工智能 运维 开发者
CodeFuse 开源官网上线啦~
CodeFuse是一个致力于开发大型代码语言模型以支持软件全生命周期的项目,涵盖设计、编码、测试等阶段,旨在提供创新的解决方案,优化开发者体验。其开源官网提供项目背景、相关AI开发项目展示、详细文档及贡献指南。团队已推出多个代码模型和开源工具,并在相关领域有学术成果和行业奖项。感兴趣者可通过GitHub、HuggingFace和魔搭社区主页联系或关注。
612 0
CodeFuse 开源官网上线啦~
|
缓存 安全 网络安全
在使用SS代理时仍然遇到连接超时的问题
在使用SS代理时仍然遇到连接超时的问题
402 1

热门文章

最新文章