css3双击点赞动画,Twitter上的点赞动画

推特最近更新了他们的点赞按钮,使用了全新的动画,而这个动画使用一组动画来实现的而不是依赖于CSS 的transitions。今天使用CSS动画的steps方法来重建这个动画。

错觉

这种效果跟西洋镜的原理差不多,都是呈现一系列的帧,形成动画的效果

Demo

鼠标移到星星上面触发动画:

在这个例子中,我们开始创建一些列动画中会用到的图片,我们就直接使用Twitter的图标了。

f34d9d93754c05908b35cdb504b30db2.png

为了驱动这些图片帧,我们需要把他们放在同一水平线,这样我们只需要移动背景图的位置就行了。

99d7d24b2b8ede119b18b3d43d2e95d3.png

Step() 方法

对于大多数timing function而言(比如cubic-bezier),过度的开始和结束都会很平滑。但是steps方法不同,它把过度切分成很多步。每一步的区别很明显。

0b1a9733a01c9b7dcaeef854498e43a4.png

这个例子只需要一句HTML

背景图片

接下来添加一点样式和背景图片。

955b792082ea81880661e0153ed120f2.png

.fave {

width: 70px;

height: 50px;

background: url(images/twitter_fave.png) no-repeat;

background-position: 0 0;

}

当鼠标移上来的时候,我们使用steps方法逐步移动背景图。

.fave:hover {

background-position: -3519px 0;

transition: background 1s steps(55);

}

这里需要注意第二个属性,代码的意思是当我们改变background的时候,执行过度效果,时间为1s。steps(55)的意思是,把这过度效果平均分成55步走,因为我们总共有55帧。

效果就是,当我们把鼠标移上去的时候,就会执行这等间隔的55步过度。

为什么不使用gif?

这里不适用gif的原因是文件会很大,而且帧率不好控制。而使用上述的方法,我们可以暂定,倒带,或者跳到任意帧。

steps()方法的其他用处

驱动背景图片精灵生成动画只是steps的一种使用方法。任何使用一些列特定步骤的动画都可以用steps生成,比如做一个时钟。

559ccdae62acc29a9cb0b9076bce4a05.png

我是周晓楷,华南师范大学在校本科生,有轻微强迫症,拖延症,正在努力学习前端知识!微博@Helkyle。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用Animate.css的CSS3动画实现,参考代码如下: <style> .heart { animation:heartbeat 1s ease; transform-origin:50% 50%; }@keyframes heartbeat { 0% {transform:scale(1);} 20% {transform:scale(1.2);} 40% {transform:scale(1);} 60% {transform:scale(1.2);} 80% {transform:scale(1);} 100% {transform:scale(1);} } </style><div class="heart"></div> ### 回答2: 下面是一个用300字回答的微信小程序点赞动画的代码: 首先,在小程序的wxml文件中定义一个按钮控件来触发点赞动画,如下所示: ``` <button bindtap="like" class="like-button"> <image src="{{liked ? '/images/like_filled.png' : '/images/like.png'}}" class="like-icon" /> <text class="like-text">{{liked ? '已赞' : '点赞'}}</text> </button> ``` 然后,在wxss文件中定义按钮和动画效果的样式,如下所示: ```css .like-button { display: flex; align-items: center; justify-content: center; } .like-icon { width: 20px; height: 20px; margin-right: 5px; } .like-text { font-size: 14px; } @keyframes like-animation { 0% { transform: scale(1); } 50% { transform: scale(1.2); } 100% { transform: scale(1); } } .like-animation { animation: like-animation 0.5s; } ``` 接下来,在小程序的js文件中定义按钮的点击事件和点赞动画的触发逻辑,如下所示: ```javascript Page({ data: { liked: false }, like: function() { this.setData({ liked: !this.data.liked }); if (this.data.liked) { wx.showToast({ title: '点赞成功', icon: 'success' }); } this.triggerAnimation(); }, triggerAnimation: function() { const animation = wx.createAnimation({ duration: 500, timingFunction: 'ease' }); this.animation = animation; this.animation.scale(1.2).step(); this.animation.scale(1).step(); this.setData({ animationData: animation.export() }); } }) ``` 最后,在小程序的json文件中添加对应的图片资源,如下所示: ```json { "navigationBarTitleText": "点赞动画", "usingComponents": {} } ``` 这样,当用户点击“点赞”按钮时,按钮会执行点赞动画,并且同时显示点赞成功的toast提示。 ### 回答3: 微信小程序的点赞动画代码可以使用动画组件和动画实例来实现。 首先,在页面的 wxml 文件中添加一个按钮和一个图片,用于触发点赞动画和显示点赞的图片: ```html <view> <button bindtap="startAnimation">点赞</button> <image src="{{likeImageSrc}}" class="like-image {{likeAnimationClass}}"></image> </view> ``` 然后,在页面的 js 文件中定义点赞动画相关的数据和方法: ```javascript Page({ data: { likeImageSrc: "/images/like.png", // 点赞图片路径 likeAnimationClass: "" // 点赞动画的类名 }, startAnimation() { // 创建动画实例 const animation = wx.createAnimation({ duration: 1000, // 动画时长为1秒 timingFunction: "ease" // 缓动函数为匀速 }); // 以旋转动画为例 animation.scale(1.5).rotateY(360).step(); // 缩放并旋转动画 this.setData({ likeAnimationClass: "like-animation" // 添加动画类名,触发动画效果 }); setTimeout(() => { // 动画结束后,重置动画样式 this.setData({ likeAnimationClass: "" }); }, 1000); } }) ``` 添加如下 CSS 样式,用于实现点赞动画效果: ```css .like-animation { animation: like-animation 1s ease-in-out infinite; // 使用 CSS 动画实现点赞效果 } @keyframes like-animation { from { transform: scale(1) rotateY(0); // 起始动画样式 } to { transform: scale(1.5) rotateY(360deg); // 结束动画样式 } } ``` 最后,将点赞的图片资源放在项目的 images 目录下,命名为 like.png,代码中的路径需要根据实际路径进行修改。 经过以上代码的设置,当点击点赞按钮时,点击的同时点赞动画会开始播放,点赞图片会缩放并旋转,1秒钟后动画结束。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值