当前位置: 首页 > article >正文

微信小程序点赞动画特效实现

这里提供两种实现点赞动画特效的方法:

方法一:使用 CSS 动画

  1. wxml 文件:
<view class="like-container">
  <image src="{{isLiked ? likedImg : unlikedImg}}" class="like-icon {{isLiked ? 'liked' : ''}}" bindtap="toggleLike"></image>
</view>
  1. wxss 文件:
.like-container {
  position: relative;
}

.like-icon {
  width: 30px;
  height: 30px;
}

.liked {
  animation: likeAnimation 0.5s ease-out;
}

@keyframes likeAnimation {
  0% {
    transform: scale(1);
    opacity: 0;
  }
  50% {
    transform: scale(1.5);
    opacity: 1;
  }
  100% {
    transform: scale(1);
    opacity: 0;
  }
}
  1. js 文件:
Page({
  data: {
    isLiked: false,
    likedImg: '/path/to/liked-icon.png',
    unlikedImg: '/path/to/unliked-icon.png',
  },
  toggleLike() {
    this.setData({
      isLiked: !this.data.isLiked
    })
  }
})

解释:

  • 在 wxml 中,使用 image 组件展示点赞图标,并绑定 toggleLike 函数到点击事件。
  • 在 wxss 中,使用 @keyframes 定义动画 likeAnimation,实现缩放和渐隐效果。
  • 在 js 中,通过 isLiked 变量控制点赞状态,并动态切换图片和添加动画效果。

方法二:使用 canvas 绘制动画

  1. wxml 文件:
<view class="like-container">
  <canvas canvas-id="likeCanvas" class="like-canvas"></canvas>
  <image src="{{isLiked ? likedImg : unlikedImg}}" class="like-icon" bindtap="toggleLike"></image>
</view>
  1. wxss 文件:
.like-container {
  position: relative;
}

.like-canvas {
  position: absolute;
  top: 0;
  left: 0;
  width: 30px;
  height: 30px;
}

.like-icon {
  width: 30px;
  height: 30px;
}
  1. js 文件:
Page({
  data: {
    isLiked: false,
    likedImg: '/path/to/liked-icon.png',
    unlikedImg: '/path/to/unliked-icon.png',
  },
  toggleLike() {
    this.setData({
      isLiked: !this.data.isLiked
    })
    this.drawLikeAnimation()
  },
  drawLikeAnimation() {
    const ctx = wx.createCanvasContext('likeCanvas', this)
    // ... 使用 canvas API 绘制点赞动画,例如:绘制心形、气泡等
  }
})

解释:

  • 在 wxml 中,使用 canvas 组件作为动画容器,并使用 image 组件展示点赞图标。
  • 在 wxss 中,将 canvas 组件绝对定位在 image 组件上方。
  • 在 js 中,使用 canvas API 绘制点赞动画,例如绘制心形、气泡等。

两种方法的比较:

  • CSS 动画简单易用,但效果较为单一。
  • Canvas 动画更加灵活,可以实现更复杂的动画效果,但需要编写更多代码。

总结:

以上两种方法都可以实现点赞动画效果,您可以根据实际需求选择合适的方案。


http://www.kler.cn/news/309396.html

相关文章:

  • [乱码]确保命令行窗口与主流集成开发环境(IDE)统一采用UTF-8编码,以规避乱码问题
  • C++学习笔记(25)
  • TypeScript —枚举的应用
  • “拍照赚钱”的任务定价(2017数学建模国赛b题)
  • 中国农业银行——数据湖建设
  • 5V全桥驱动芯片单通道可替代型号LG9110S,应用于牙刷,电子锁,共享单车锁等产品中具有过温保护功能
  • Python模块化程序设计理念及实战
  • 【快慢指针】突破环形链表
  • 企微无限群发:精准营销与合规边界的探索
  • 性能测试的五大目标
  • 基于yolov8的舌苔识别检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • Meme“淘金”热潮下:Meme发射平台的安全风险分析
  • Python文本数据切分及HTML数据处理
  • bootstrapping in the main distro: listing WSL distros: running WSL xxxx
  • DevOps工程师的职业发展路径
  • 荣耀时刻|Anzo Capital 闪耀2024国际金融产业博览会
  • 尚航科技受邀出席腾讯全球数字生态大会,并重磅发布云智算中心共建计划
  • flutter widget.onPressed回调无效
  • 学会这个AI副业,小白也能轻松副业变现100+!
  • python内置模块pathlib.Path类操作目录和文件
  • 游戏各个知识小点汇总
  • web安全测试入门
  • 如何用安卓玩Java版Minecraft,安卓手机安装我的世界Java版游戏的教程
  • LabVIEW提高开发效率技巧----VI服务器和动态调用
  • 【Webpack--000】了解Webpack
  • 如何查看微信聊天记录?四种实用方法查询微信聊天记录,赶快码住!
  • 分析内存动态加载PE文件
  • 第十一章 【后端】商品分类管理微服务(11.3)——商品管理模块 yumi-etms-goods
  • NLP与文本生成:使用GPT模型构建自动写作系统
  • 建筑机器人通用操作系统设计方案