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

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

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

方法一:使用 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 动画更加灵活,可以实现更复杂的动画效果,但需要编写更多代码。

总结:

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • k8s以及prometheus
  • 解读 Redis 底层密码:命令执行流程与高效性之源
  • 栈和队列的算法题目(C语言)
  • linux入门到实操-4 linux系统网络配置、连接测试、网络连接模式、修改静态IP、配置主机名
  • Linux基础---06压缩打包及解压rar压缩包
  • Rust 函数
  • 数据结构实验1
  • [创业之路-146] :如何理解:复杂的事情简单化,简单的事情标准化,标准的事情流程化,流程的事情数字化,数字化的事情自动化,自动化的事情智能化
  • CentOS 8FTP服务器
  • 第T11周:优化器对比实验
  • 架构设计:负责网络、定时、坐下、站起、重连等,支持多类游戏的无锁房间
  • 通过python提取PDF文件指定页的图片
  • k8s笔记——kubebuilder实战
  • wifiip地址可以随便改吗?wifi的ip地址怎么改变
  • 【计算机网络 - 基础问题】每日 3 题(二)
  • SegmentFault for Android 3.0 发布
  • [nginx文档翻译系列] 控制nginx
  • 2017年终总结、随想
  • Apache的80端口被占用以及访问时报错403
  • C++入门教程(10):for 语句
  • Fastjson的基本使用方法大全
  • JavaScript设计模式之工厂模式
  • Nodejs和JavaWeb协助开发
  • 第2章 网络文档
  • 对超线程几个不同角度的解释
  • 区块链将重新定义世界
  • 思考 CSS 架构
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 小程序01:wepy框架整合iview webapp UI
  • ​插件化DPI在商用WIFI中的价值
  • # 达梦数据库知识点
  • #QT(一种朴素的计算器实现方法)
  • #考研#计算机文化知识1(局域网及网络互联)
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (7)摄像机和云台
  • (C语言)球球大作战
  • (function(){})()的分步解析
  • (补充)IDEA项目结构
  • (附源码)ssm跨平台教学系统 毕业设计 280843
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (算法)N皇后问题
  • (五)activiti-modeler 编辑器初步优化
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)jdk与jre的区别
  • .net core 6 redis操作类
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net 托管代码与非托管代码
  • .Net 执行Linux下多行shell命令方法
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • /dev/sda2 is mounted; will not make a filesystem here!
  • @PostConstruct 注解的方法用于资源的初始化
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [BUG] Hadoop-3.3.4集群yarn管理页面子队列不显示任务
  • [BZOJ 1040] 骑士
  • [C++] new和delete