Twitter 红心点赞 CSS3 动画按钮特效
一、前言
通过使用 CSS3 动画特性,实现当用户点赞时的动画特效。使用这种动画效果,可以替换网页中的一些 GIF 动画图片、Flash 动画和 JavaScript 动画,相比之下 CSS3 动画优势很明显,它体量更轻,更易维护,加载速度更快。
创建 CSS3 动画需要使用@keyframes
规则,在@keyframes
中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果。
当用户点击红心时,出现烟花爆炸效果的动画,同时点赞数加一,再次点击可取消点赞,同时点赞数减一。
红心点赞效果截图
二、实现红心点赞动画
1、新建 HTML 页面
其中“红心点赞”的 HTML 代码如下:
<div class="feed">
<p>示例 1</p>
<div class="heart" id="like1" rel="like"></div>
<div class="likeCount" id="likeCount1">15</div>
</div>
<div class="feed">
<p>示例 2</p>
<div class="heart" id="like2" rel="like"></div>
<div class="likeCount" id="likeCount2">21</div>
</div>
<div class="feed">
<p>示例 3</p>
<div class="heart" id="like3" rel="like"></div>
<div class="likeCount" id="likeCount3">37</div>
</div>
页面中可重复出现多个“红心点赞”,以 HTML 元素<div class="feed">...</div>
节点为一个红心点赞,其中元素<div class="heart" id="like1" rel="like"></div>
节点为展示红心并执行动画,其中元素<div class="likeCount" id="likeCount1">15</div>
节点为展示点赞数。
2、引入 heart.css 样式文件
红心点赞 CSS 代码如下:
.heart {
background: url(../images/web_heart_animation.png);
background-position: left;
background-repeat: no-repeat;
height: 100px;
width: 100px;
cursor: pointer;
position: absolute;
left: -14px;
background-size: 2900%;
}
.heart:hover, .heart:focus {
background-position: right;
}
@-webkit-keyframes heartBlast {
0% {
background-position: left;
}
100% {
background-position: right;
}
}
@keyframes heartBlast {
0% {
background-position: left;
}
100% {
background-position: right;
}
}
.heartAnimation {
display: inline-block;
-webkit-animation-name: heartBlast;
animation-name: heartBlast;
-webkit-animation-duration: .8s;
animation-duration: .8s;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
-webkit-animation-timing-function: steps(28);
animation-timing-function: steps(28);
background-position: right;
}
.feed {
height: 150px;
position: relative;
margin-bottom: 20px;
}
.feed p {
font-family: "Microsoft YaHei",'Georgia', Times, Times New Roman, serif;
font-size: 20px;
}
.likeCount {
font-family: 'Georgia', Times, Times New Roman, serif;
margin-top: 32px;
margin-left: 68px;
font-size: 25px;
color: #999999;
}
观察上面的 CSS 代码,其中主要用到了 CSS3 动画@keyframes
规则,@keyframes heartBlast
规定动画的名称为heartBlast
,动画内容为将背景图片的定位,由左边变换至右边。在.heartAnimation
类选择器中使用了动画animation-name: heartBlast;
,其中animation-duration: .8s;
规定动画的时长为 0.8 秒,animation-iteration-count: 1;
规定动画播放 1 次,animation-timing-function: steps(28);
规定动画的速度曲线,使用steps(28)
值表示为一个阶跃函数,并阶跃 28 次。
可以总结为:将元素背景图片定位,由左向右逐帧显示一次,并在 0.8 秒的时间内显示完毕。
关于animation-timing-function: steps(28);
可看这篇文章《CSS3 动画属性 animation-timing-function: steps》
3、引入 heart.js 脚本文件
红心点赞的 JavaScript 代码如下:
$(document).ready(function () {
$(".heart").on("click", function () {
var heart = $(this);
var likeCount = $("#likeCount" + heart.attr("id").split("like")[1]);
var intCount = parseInt(likeCount.html());
var rel = heart.attr("rel");
heart.css("background-position", "");
if (rel === "like") {
likeCount.html(intCount + 1);
heart.addClass("heartAnimation").attr("rel", "unlike");
} else {
likeCount.html(intCount - 1);
heart.removeClass("heartAnimation").attr("rel", "like");
heart.css("background-position", "left");
}
}).on("mouseleave", function () {
$(this).css("background-position", "");
});
});
观察上面 JavaScript 代码,主要是通过在 HTML 元素上绑定click
事件,当用户点击红心时,切换元素的 CSS 样式类.heartAnimation
达到显示动画效果的目的。另外需要注意,在 HTML 页面中要引入 jQuery 库文件。
4、引入 HTML 元素背景图
背景图太长,下面是部分截取。
三、下载完整文件
点击链接,下载演示文件:Twitter 红心点赞 CSS3 动画按钮特效
(完)