首先,需要创建一个元素,代码如下
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<head>
<title></title>
</head>
<body>
<div id="bgCanvas">
<div class="heart-shape"></div>
</div>
</body>
</html>
然后,为元素添加样式,变成心形,代码如下:
.heart-shape{
/* 基础样式 */
position: relative;
width: 100px;
height: 100px;
background-color: #ff1414;
/* 旋转 */
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
/* before和after的基础样式*/
.heart-shape:before,.heart-shape:after{
position: absolute;
content: '';
width: 100px;
height: 100px;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-o-border-radius: 50%;
border-radius: 50%;
background-color: #ff1414;
}
/* before的增强样式 */
.heart-shape:before{
bottom: 0;
left: -50px;
}
/* after的增强样式 */
.heart-shape:after{
top: -50px;
right: 0;
}
这里使用了:after和:before伪元素,创建了一个如下效果的心形:
然后使用@keyframs定义一个动画,代码如下:
/* 左心室动画 */
@keyframes heart-left
{
0% {bottom: 0;left: -50%;}
25% {bottom: 0;left: 50%;}
50% {bottom: 0;left: 50%;}
75% {bottom: 0;left: -50%;}
}
/* 右心室动画 */
@keyframes heart-right
{
25% {top: -50%;right: 0;}
50% {top: 50%;right: 0;}
75% {top: 50%;right: 0;}
100% {top: -50%;right: 0;}
}
/* Firefox */
@-moz-keyframes heart-left
{
0% {bottom: 0;left: -50%;}
25% {bottom: 0;left: 50%;}
50% {bottom: 0;left: 50%;}
75% {bottom: 0;left: -50%;}
}
/* Safari 和 Chrome */
@-webkit-keyframes heart-left
{
0% {bottom: 0;left: -50%;}
25% {bottom: 0;left: 50%;}
50% {bottom: 0;left: 50%;}
75% {bottom: 0;left: -50%;}
}
/* Opera */
@-o-keyframes heart-left
{
0% {bottom: 0;left: -50%;}
25% {bottom: 0;left: 50%;}
50% {bottom: 0;left: 50%;}
75% {bottom: 0;left: -50%;}
}
/* 右边 */
@keyframes heart-right
{
25% {top: -50%;right: 0;}
50% {top: 50%;right: 0;}
75% {top: 50%;right: 0;}
100% {top: -50%;right: 0;}
}
/* Firefox */
@-moz-keyframes heart-right
{
25% {top: -50%;right: 0;}
50% {top: 50%;right: 0;}
75% {top: 50%;right: 0;}
100% {top: -50%;right: 0;}
}
/* Safari 和 Chrome */
@-webkit-keyframes heart-right
{
25% {top: -50%;right: 0;}
50% {top: 50%;right: 0;}
75% {top: 50%;right: 0;}
100% {top: -50%;right: 0;}
}
/* Opera */
@-o-keyframes heart-right
{
25% {top: -50%;right: 0;}
50% {top: 50%;right: 0;}
75% {top: 50%;right: 0;}
100% {top: -50%;right: 0;}
}
错开时间改变心形左右两部分的位置就能够看起来是翻转效果。
最后使用animation属性分别引入动画,代码如下:
/* before的增强样式 */
.heart-shape:before{
bottom: 0;
left: -50px;
/* 动画 */
-webkit-animation: heart-left 6s; /* Safari 和 Chrome */
-moz-animation: heart-left 6s; /* Firefox */
-o-animation: heart-left 6s; /* Opera */
animation: heart-left 6s;
/* 规定动画播放次数 infinite为无限循环*/
-webkit-animation-iteration-count:infinite; /* Safari 和 Chrome */
animation-iteration-count:infinite;
}
/* after的增强样式 */
.heart-shape:after{
top: -50px;
right: 0;
/* 动画 */
-moz-animation: heart-right 6s; /* Firefox */
-webkit-animation: heart-right 6s; /* Safari 和 Chrome */
-o-animation: heart-right 6s; /* Opera */
animation: heart-right 6s;
/* 规定动画播放次数 infinite为无限循环*/
-webkit-animation-iteration-count:infinite; /* Safari 和 Chrome */
animation-iteration-count:infinite;
}
这样就实现了心形的翻转动画。效果如下:
之后还加了一个JS点击事件,点击大心形的时候会变成随机个小心形分布:
var breakHeart = document.getElementsByClassName('heart-shape')[0];
var bgCanvas = document.getElementById('bgCanvas');
this.addEventListener('click',function(e){
//随机数
var randomNum = Math.round(Math.random()*50);
for (var i =0;i < randomNum; i++) {
//创建小心形
var smallHeart = document.createElement('div');
var rNum = Math.round(Math.random()*50);
//添加类名
smallHeart.className='small-heart';
//插入到页面中
bgCanvas.appendChild(smallHeart);
//每次旋转不同角度
smallHeart.style.transform ='rotate('+ rNum+'deg)';
smallHeart.style.left = 160+2*rNum*9+'px';
smallHeart.style.top = 100+rNum*i+'px';
}
breakHeart.style.display = 'none';
},false)
CSS代码:
.small-heart{
/* 基础样式 */
position: absolute;
width: 20px;
height: 20px;
background-color: #ff1414;
/* 旋转 */
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
/* before和after的基础样式*/
.small-heart:before,.small-heart:after{
position: absolute;
content: '';
width: 20px;
height: 20px;
-webkit-border-radius: 50%;
-moz-border-radius: 50%;
-o-border-radius: 50%;
border-radius: 50%;
background-color: #ff1414;
}
/* before的增强样式 */
.small-heart:before{
bottom: 0;
left: -50%;
}
/* after的增强样式 */
.small-heart:after{
top: -50%;
right: 0;
}
点击之后的效果: