程序猿都是怎么表白的呢?
当然是用咱们高大上的代码啦,咱们今天就用js来做一个动态效果,实现的效果是这样的
http://www.iqiyi.com/w_19s8vbb4vp.html
首先,我们看一下这个总共包含两大部分:
一部分是上面文字部分,另一部分是下面跳动的心,所以我们创建两个盒子,分别装这两部分东西
Hearts
然后给textCon设置样式,和文字大小:
*{
margin: 0;
padding:0;
}
html,body{
width:100%;
height:100%;
text-align: center;
}
.textCon{
width:170px;
height:60px;
margin:50px auto;
}
.text{
font-size:48px;
}
就是现在这效果:
紧接着给heart设置样式,并绘制爱心图案。
爱心就是一个正方形和两个圆相互组成,先设置heart为一个正方形:
.heart{
width:50px;
height:50px;
background-color:#cc2a5d;
margin:50px auto;
}
再给heart用伪元素选择器画两个圆:
.heart::before,
.heart::after{
content:'';
width:100%;
height:100%;
background-color:#cc2a5d;
border-radius: 50%;
}
现在的两个圆在正方形这个盒子中中,我们看不到,我们给它的父元素一个相对定位:
position: relative;
再给这两个圆一个绝对定位,让它在它的父元素中待在同一位置,方便下面给它们两个位移出一半:
position: absolute;
top:0;
left:0;
现在没啥变化,只是让两个圆脱离文档流,不会被挤出盒子,然后给两个圆分别设置一个位移,让它们各显示一半:
.heart::before{
transform: translateX(-50%);
}
.heart::after{
transform: translateY(-50%);
}
这样一个爱心就画好了,但是它现在是倾斜的,所以我们需要给它一个旋转:
transform: rotate(45deg);
现在,大的框架已经完成,下面就需要给它加动态效果了,我们先给这个大心一个跳动的效果:
@keyframes heart{
0%{
transform: scale(0.8) rotate(45deg);
opacity: 0.8;
}
50%{
transform: scale(1) rotate(45deg);
opacity: 1;
}
100%{
transform: scale(0.8) rotate(45deg);
opacity: 0.8;
}
}
并且给心设置一个跳动的方式:
animation: heart 1s ease-in infinite;
写在heart标签中,这样心的跳动效果就完成了。
然后在写字体上面浮现的小心心
.textCon .item{
position: absolute;
opacity: 0;
background-color:#cc2a5d;
transform: rotate(45deg);
animation: hearts 3s ease-in infinite;
}
.textCon .item::before,
.textCon .item::after{
content:'';
width:100%;
height:100%;
background-color:#cc2a5d;
position: absolute;
top:0;
left:0;
border-radius: 50%;
}
.textCon .item::before{
transform: translateX(-50%);
}
.textCon .item::after{
transform: translateY(-50%);
}
给textCon一个相对定位,让这些小心心在这个盒子范围内由上至下位移的动态效果:
@keyframes hearts{
0%{
opacity: 0;
transform: translateY(0%) rotate(45deg);
}
20%{
opacity: 0.8;
transform: translateY(-20%) rotate(45deg);
}
100%{
opacity: 0;
transform: translateY(-1000%) rotate(45deg);
}
}
接下来咱们写js部分,在js中绘制小心心数量并设置出现和消失效果:
var box = document.getElementsByClassName('textCon')[0];
function init() {
var width = box.offsetWidth;
var count = parseInt(width / 50 * 5);
for (var i = 0; i < count; i++) {
var size = parseInt(ran(60, 120) / 10);
var ele = document.createElement('div');
ele.classList.add('item');
ele.style.width = size + 'px';
ele.style.height = size + 'px';
ele.style.left = ran(0, 95) + '%';
ele.style.top = ran(20, 80) + '%';
ele.style.animationDelay = ran(0, 30) / 10 + 's';
box.appendChild(ele);
}
}
function ran(min, max) {
min = parseInt(min);
max = parseInt(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
init();
配合上面位移的动态效果就实现了由下至上位移出现并消失的效果。
到这就能实现我们上面看到的效果了。赶紧去试试吧。
小编能力有限,存在不足或不全,请大家指出,共同学习与交流。