学习 渡一课程 多元素组合动画 练习。
在我们开发购物车功能时,经常会有点击添加按钮,就会有一个小圆点掉进购物车的动画,如下图所示,今天我们通过css来实现。
首先实现多元素组合动画
直接上代码,可以复制到本地使用:
<!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>
实现多个动画
上代码
<!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>