翻到一个小案例,是当时做逐帧动画练习的时候随手完成的。
不过这个小案例还是有点点用,有什么用?就是看到自己曾经喜欢过的明星的脸时还有那么一丝丝悸动,哈哈……
点击图片看效果,为你喜欢的爱豆点个赞,就可以看到爆裂的小爱心了。
核心代码:
/* 一维布局 */
.flex{
display: flex;
flex-wrap: wrap;
/* 水平方向上的空间分布 */
justify-content:space-between;
}
.idou{
position: relative;
overflow: hidden;
}
/* 伪对象 */
.idou:after{
content: '';
position:absolute;
left:-100%;
top:0;
width:100%;
height: 100%;
background:linear-gradient(to right,rgba(255,255,255,0) 20%,rgba(255,255,255,0.7) 50%,rgba(255,255,255,0));
/* 变形:倾斜 */
transform: skew(-45deg);
transition: 0.5s ease-out;
}
.idou:hover:after{
left:100%;
}
.message{
height: 100px;
text-align: center;
}
.heart{
display: inline-block;
width:100px;
height: 100px;
background: url(images/web_heart_animation.png);
vertical-align: middle;
}
.heart-on{
/* 有了forwards的逐帧动画,关键帧要减少一帧,背景图片挪动的位置少一帧 */
animation: heart 0.2s steps(28) forwards;
}
.count{
font-size:2rem;
color: #e2264d;
font-family: Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif;
vertical-align: middle;
}
@keyframes heart{
0%{
background-position: 0 0 ;
}
100%{
background-position: -2800px 0 ;
}
} // 找对象
const oHeart=document.querySelectorAll('.heart');
const oCount=document.querySelectorAll('.count');
console.log(oHeart,oCount);
// foreach(function(item,index){})
// item就是集合里面正在操作的对象,index是正在操作的对象的索引值
oHeart.forEach(function(item,index){
// 为每一个要被点击的心设置一个开关状态,默认为false没有点击过
item.isOn=false;
item.onclick=function(){
var count=Number(oCount[index].innerHTML);
// console.log(count);
if(!this.isOn){
oCount[index].innerHTML=count+1;
this.classList.add('heart-on');
}
else{
oCount[index].innerHTML=count-1;
this.classList.remove('heart-on');
}
// 每点击一次,状态都要切换一次。
this.isOn=!this.isOn;
}
})逐帧动画最牛的案例还是看百度浏览器这个,特别是那个奔跑的熊:


发表评论:
◎请发表你卖萌撒娇或一针见血的评论,严禁小广告。