当前位置: 首页 > news >正文

Filp动画

一、filp动画是什么?

在前端开发中,Flip 动画通常指的是通过 CSS 或 JavaScript 实现的类似翻转效果的动画。通常涉及到元素的旋转或翻转,给用户一种“翻书”或“翻牌”之类的视觉感受。常见的应用场景包括卡片翻转、页面切换、以及各种交互式元素的动画效果。

二、Filp动画的运行步骤

  1. 记录变化之前的位置
  2. 没有过渡的从A瞬间变化到B位置
  3. 记录变化后的位置
  4. 计算位置的差值
  5. 将元素回退到之前的位置 (可以利用transform和translate来实现)
  6. 去掉移动回去的样式然后加上过渡即可

2.示例实现

我们创建两个元素给两个元素分别添加动画
<body>
    <div>
        <ul>
            <li style="background-color: aqua;">111</li>
            <li style="background-color: bisque;">222</li>
        </ul>

        <button>交换</button>
    </div>

    <script>

        const getY = (dom) => dom.getBoundingClientRect().top

        const nextTick= (callBack) => {
            requestAnimationFrame(() => {
                requestAnimationFrame(callBack)
            })
        }

        const applyTransition = (dom, initY) => {
            // 记录变化后的位置
            const li1CurY = getY(dom)

            // 计算差值
            const diif = initY - li1CurY


            // 利用transfrom 和 translate 将元素移动到之前的位置
            dom.style.transform = `translateY(${diif}px)`


            // 去掉移动回去的样式然后加上过渡即可

            nextTick(() => {
                dom.style.transform = 'none'
                dom.style.transition = '0.3s'

                // 在过渡动画结束时移除过渡属性
                dom.addEventListener('transitionend', () => {
                       dom.style.transition = 'none'
                } )
            })


        }
        /* 
            1. 记录变化之前的位置
            2. 没有过渡的从A瞬间变化到B位置
            3. 记录变化后的位置
            4. 计算位置的差值
            5. 将元素回退到之前的位置 (可以利用transform和translate来实现)
            6. 去掉移动回去的样式然后加上过渡即可
        */


        const btn = document.querySelector('button')

        btn.onclick = () => {
            const ul = document.querySelector('ul')

            const li = document.querySelectorAll('li')
            const li1 = li[0]
            const li2 = li[1]

            // 第一步计算之前的位置
            const li1Y = getY(li1)
            const li2Y = getY(li2)

            // 第二步变化位置
            ul.insertBefore(li2, li1)

            applyTransition(li1, li1Y)
            applyTransition(li2, li2Y)

        }



    </script>
</body>

相关文章:

  • 大数据SQL调优专题——底层调优
  • OpenCV(11):人脸检测、物体识别
  • Ubuntu本地使用AnythingLLM
  • 网络通信/IP网络划分/子网掩码的概念和使用
  • mysql的主从同步
  • Java CAS 与 AQS
  • 服务器主板可以单独升级吗?有什么影响?
  • 多模态模型:学习笔记(二)
  • MySQL 面试
  • Gemma2DecoderLayer 解析:Pre-FFW 和 Post-FFW LayerNorm 的作用
  • 【论文笔记-ECCV 2024】AnyControl:使用文本到图像生成的多功能控件创建您的艺术作品
  • VSCode+PlatformIO报错 找不到头文件
  • Zabbix告警分析新纪元:本地DeepSeek大模型实现智能化告警分析
  • 深度学习-133-LangGraph之应用实例(二)使用面向过程和面向对象的两种编程方式构建带记忆的聊天机器人
  • C#问题解决方案 --- 生成软件hash,生成文件hash
  • git merge -s ours ...的使用方法
  • 数据安全_笔记系列10:数据分类分级与保护策略详解
  • threejs:射线拾取封装
  • 计算机毕业设计 ——jspssm518Springboot 的影视影院订票选座管理系统
  • unity使用PICO Neo3开发,XR环境配置
  • wordpress+资源站模板/百度助手app下载
  • 网站建设如果没有源代码/海东地区谷歌seo网络优化
  • 日语网站建设市场/短视频关键词seo优化
  • 怎么快速建动态网站/网络营销软件下载
  • 做ps彩图什么网站好/关键词seo服务
  • 长春seo关键词排名/北京优化靠谱的公司