当前位置: 首页 > 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>
http://www.dtcms.com/a/40479.html

相关文章:

  • 大数据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环境配置
  • 异常(2)
  • Java高频面试之SE-23
  • 27.[前端开发-JavaScript基础]Day04-函数基本使用-递归-变量作用域-函数式编程
  • 结构型模式 - 代理模式 (Proxy Pattern)
  • 利用python进行数据分析(重点、易忘点)---第八章数据规整:聚合、合并和重塑
  • Linux查看和处理文件内容
  • 【网络编程】网络套接字和使用案例
  • 数学与计算生物学:生物系统的数学建模
  • vs code默认主题修改配置
  • 大白话JavaScript如何深拷贝一个对象或数组?JSON.parse (JSON.stringify ()) 这种方法有什么局限性?