Twitter 红心点赞 CSS3 动画按钮特效

[TOCM]

一、前言


通过使用 CSS3 动画特性,实现当用户点赞时的动画特效。使用这种动画效果,可以替换网页中的一些 GIF 动画图片、Flash 动画和 JavaScript 动画,相比之下 CSS3 动画优势很明显,它体量更轻,更易维护,加载速度更快。

创建 CSS3 动画需要使用@keyframes规则,在@keyframes中规定某项 CSS 样式,就能创建由当前样式逐渐改为新样式的动画效果。

当用户点击红心时,出现烟花爆炸效果的动画,同时点赞数加一,再次点击可取消点赞,同时点赞数减一。

红心点赞

红心点赞效果截图

二、实现红心点赞动画


1、新建 HTML 页面

其中“红心点赞”的 HTML 代码如下:

  1. <div class="feed">
  2. <p>示例 1</p>
  3. <div class="heart" id="like1" rel="like"></div>
  4. <div class="likeCount" id="likeCount1">15</div>
  5. </div>
  6. <div class="feed">
  7. <p>示例 2</p>
  8. <div class="heart" id="like2" rel="like"></div>
  9. <div class="likeCount" id="likeCount2">21</div>
  10. </div>
  11. <div class="feed">
  12. <p>示例 3</p>
  13. <div class="heart" id="like3" rel="like"></div>
  14. <div class="likeCount" id="likeCount3">37</div>
  15. </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 代码如下:

  1. .heart {
  2. background: url(../images/web_heart_animation.png);
  3. background-position: left;
  4. background-repeat: no-repeat;
  5. height: 100px;
  6. width: 100px;
  7. cursor: pointer;
  8. position: absolute;
  9. left: -14px;
  10. background-size: 2900%;
  11. }
  12. .heart:hover, .heart:focus {
  13. background-position: right;
  14. }
  15. @-webkit-keyframes heartBlast {
  16. 0% {
  17. background-position: left;
  18. }
  19. 100% {
  20. background-position: right;
  21. }
  22. }
  23. @keyframes heartBlast {
  24. 0% {
  25. background-position: left;
  26. }
  27. 100% {
  28. background-position: right;
  29. }
  30. }
  31. .heartAnimation {
  32. display: inline-block;
  33. -webkit-animation-name: heartBlast;
  34. animation-name: heartBlast;
  35. -webkit-animation-duration: .8s;
  36. animation-duration: .8s;
  37. -webkit-animation-iteration-count: 1;
  38. animation-iteration-count: 1;
  39. -webkit-animation-timing-function: steps(28);
  40. animation-timing-function: steps(28);
  41. background-position: right;
  42. }
  43. .feed {
  44. height: 150px;
  45. position: relative;
  46. margin-bottom: 20px;
  47. }
  48. .feed p {
  49. font-family: "Microsoft YaHei",'Georgia', Times, Times New Roman, serif;
  50. font-size: 20px;
  51. }
  52. .likeCount {
  53. font-family: 'Georgia', Times, Times New Roman, serif;
  54. margin-top: 32px;
  55. margin-left: 68px;
  56. font-size: 25px;
  57. color: #999999;
  58. }

观察上面的 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 代码如下:

  1. $(document).ready(function () {
  2. $(".heart").on("click", function () {
  3. var heart = $(this);
  4. var likeCount = $("#likeCount" + heart.attr("id").split("like")[1]);
  5. var intCount = parseInt(likeCount.html());
  6. var rel = heart.attr("rel");
  7. heart.css("background-position", "");
  8. if (rel === "like") {
  9. likeCount.html(intCount + 1);
  10. heart.addClass("heartAnimation").attr("rel", "unlike");
  11. } else {
  12. likeCount.html(intCount - 1);
  13. heart.removeClass("heartAnimation").attr("rel", "like");
  14. heart.css("background-position", "left");
  15. }
  16. }).on("mouseleave", function () {
  17. $(this).css("background-position", "");
  18. });
  19. });

观察上面 JavaScript 代码,主要是通过在 HTML 元素上绑定click事件,当用户点击红心时,切换元素的 CSS 样式类.heartAnimation达到显示动画效果的目的。另外需要注意,在 HTML 页面中要引入 jQuery 库文件。

4、引入 HTML 元素背景图

背景图太长,下面是部分截取。

红心点赞

三、下载完整文件


点击链接,下载演示文件:Twitter 红心点赞 CSS3 动画按钮特效

(完)