购物车-多元素组合动画css

学习渡一课程 多元素组合动画练习。

在我们开发购物车功能时,经常会有点击添加按钮,就会有一个小圆点掉进购物车的动画,如下图所示,今天我们通过css来实现。

首先实现多元素组合动画

直接上代码,可以复制到本地使用:

javascript 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>多元素动画</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        .view{
            width: 400px;
            height: 600px;
            position: relative;
          
            border: 1px solid #dedede;
        }
        .ShoppingCart {
            position: absolute;
            right: 0;
            bottom: 0;
            text-align: center;
            width: 80px;
            height: 40px;
            background-color: blueviolet;
            color: #ffffff;
        }
        
        .add {
            position: relative;
            width: 20px;
            height: 20px;
            top:50px;
            left: 10px;
            background-color: blue;
            color: #ffffff;
            text-align: center;
            line-height: 20px;
            cursor: pointer;
            border-radius: 50%;
        }
        .box{
            position: absolute;
            top: 0;
            left: 0;
            display: none;
        }
        .active{
            display: block;
            animation: move1 0.6s cubic-bezier(0, 0.36, 1, 0.59);
        }
        .ball{
            width: 20px;
            height: 20px;
            top: 0;
            left: 0;
            border-radius: 50%;
            background-color: blue;
            position: absolute;
            z-index: -1;
            
        }
        .active .ball{
            animation: move2 0.6s cubic-bezier(0.35,-0.35, 1, 0.38);
        }

        @keyframes move1 {
            to {
                transform: translateX(350px);
            }
        }
        @keyframes move2 {
            to {
                transform: translateY(510px);
            }
        }

    </style>
</head>

<body>
    <div class="view">
        <div class="add" id="add">
            +
            <div class="box">
                <div class="ball"></div>
            </div>
        </div>
       
        <div class="ShoppingCart">
            购物车
        </div>
    </div>
   
    
</body>
<script>    

    let add = document.querySelector(".add")
    let box = document.querySelector(".box")
    add.addEventListener("click",()=>{
        box.className = "box active"
        setTimeout(()=>{
            box.className = "box"
        },2000)
    })
</script>
</html>

实现多个动画

上代码

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>多种元素动画</title>
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        .view{
            width: 400px;
            height: 600px;
            position: relative;
          
            border: 1px solid #dedede;
        }
        .ShoppingCart {
            position: absolute;
            right: 0;
            bottom: 0;
            text-align: center;
            width: 80px;
            height: 40px;
            background-color: blueviolet;
            color: #ffffff;
        }
        
        .add {
            position: relative;
            width: 20px;
            height: 20px;
            top:50px;
            left: 10px;
            background-color: blue;
            color: #ffffff;
            text-align: center;
            line-height: 20px;
            cursor: pointer;
            border-radius: 50%;
        }
        .box{
            position: absolute;
            top: 0;
            left: 0;
            animation: move1 0.6s cubic-bezier(0, 0.36, 1, 0.59);
        }
    
        .ball{
            width: 20px;
            height: 20px;
            top: 0;
            left: 0;
            border-radius: 50%;
            background-color: blue;
            position: absolute;
            z-index: -1;
            animation: move2 0.6s cubic-bezier(0.35,-0.35, 1, 0.38);
        }
    

        @keyframes move1 {
            to {
                transform: translateX(350px);
            }
        }
        @keyframes move2 {
            to {
                transform: translateY(510px);
            }
        }

    </style>
</head>

<body>
    <div class="view">
        <div class="add" id="add">
            +
            
        </div>
       
        <div class="ShoppingCart">
            购物车
        </div>
    </div>
   
    
</body>
<script>    

    let add = document.querySelector(".add")
    let box = document.querySelector(".box")
    add.addEventListener("click",()=>{
        let ele = document.createElement("div")
        ele.className = "box"
        ele.innerHTML = "<div class='ball'></div>"
        add.appendChild(ele)
        setTimeout(()=>{
            ele.parentNode.removeChild(ele);
        },1000)
    })
</script>
</html>
相关推荐
ℋᙚᵐⁱᒻᵉ鲸落2 小时前
移动端滑动手势冲突:overflow: auto导致外层横向滑动失效
前端·javascript·css·vue.js·html
默_笙3 小时前
🎃 前端学了 Next.js,后端该学啥?NestJS 就是 Node 版的蜜雪冰城
前端·javascript
前端snow4 小时前
ai agent --- 实现 openclaw 定时间效果
前端
码云之上5 小时前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
星栈5 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
研☆香5 小时前
简单的图片上传 删除 预览
前端
ITresearchGuest5 小时前
我用 AI 一小时写了一个世界杯数据可视化平台|前端 VibeCoding 初体验
前端·人工智能·信息可视化
慧一居士7 小时前
Vite项目中使用Less步骤,详细使用示例
前端·css
花间相见7 小时前
【LangChain组件03】—— LangChain Agents 执行与状态:工作流程与状态管理实战
java·前端·langchain
kyriewen7 小时前
面试官让我用 AI 重构一个 8 年陈的 React 组件——他说他不看代码,只看我会不会拆
前端·javascript·面试