LikeButton.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <template>
  2. <div class="like" @click.prevent="like">
  3. <img :src="isLike ? likeImg : disLikeImg" alt="" />
  4. <span><slot>16</slot></span>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. props: {
  10. isLike: {
  11. type: Boolean,
  12. default: false
  13. }
  14. },
  15. data() {
  16. return {
  17. likeImg: require('@assets/like.png'),
  18. disLikeImg: require('@assets/dislike.png')
  19. };
  20. },
  21. methods: {
  22. like() {
  23. this.checkLogin().then(() => {
  24. this.$el.children[0].className += 'rubberBand';
  25. setTimeout(() => {
  26. this.$el.children[0].className = this.$el.children[0].className.replace(/rubberBand/g, '');
  27. }, 1000);
  28. this.$emit('like');
  29. });
  30. }
  31. }
  32. };
  33. </script>
  34. <style lang="less" scoped>
  35. .like {
  36. color: #949699;
  37. // line-height: 24px;
  38. flex-shrink: 0;
  39. .flex();
  40. display: inline-flex;
  41. img {
  42. vertical-align: middle;
  43. margin-right: 3px;
  44. width: 18px;
  45. height: 18px;
  46. display: inline-block;
  47. }
  48. span {
  49. vertical-align: middle;
  50. font-size: @font1;
  51. }
  52. }
  53. @keyframes rubberBand {
  54. from {
  55. -webkit-transform: scale3d(1, 1, 1);
  56. transform: scale3d(1, 1, 1);
  57. }
  58. 30% {
  59. -webkit-transform: scale3d(1.25, 0.75, 1);
  60. transform: scale3d(1.25, 0.75, 1);
  61. }
  62. 40% {
  63. -webkit-transform: scale3d(0.75, 1.25, 1);
  64. transform: scale3d(0.75, 1.25, 1);
  65. }
  66. 50% {
  67. -webkit-transform: scale3d(1.15, 0.85, 1);
  68. transform: scale3d(1.15, 0.85, 1);
  69. }
  70. 65% {
  71. -webkit-transform: scale3d(0.95, 1.05, 1);
  72. transform: scale3d(0.95, 1.05, 1);
  73. }
  74. 75% {
  75. -webkit-transform: scale3d(1.05, 0.95, 1);
  76. transform: scale3d(1.05, 0.95, 1);
  77. }
  78. to {
  79. -webkit-transform: scale3d(1, 1, 1);
  80. transform: scale3d(1, 1, 1);
  81. }
  82. }
  83. .rubberBand {
  84. animation: rubberBand ease-in-out 1s;
  85. }
  86. </style>