微信小程序小组件 基于Canvas实现|直播|点赞气泡效果
发布时间 - 2026-01-10 23:02:27 点击率:次先发Canvas实现|直播|点赞气泡效果图:
实现细节:
1.JS:
drawImage:function(data){[/align]
var that = this
var p10= data[0][0]; /* 三阶贝塞尔曲线起点坐标值*/
var p11= data[0][1]; /* 三阶贝塞尔曲线第一个控制点坐标值*/
var p12= data[0][2]; /* 三阶贝塞尔曲线第二个控制点坐标值*/
var p13= data[0][3]; /* 三阶贝塞尔曲线终点坐标值*/
var p20= data[1][0];
var p21= data[1][1];
var p22= data[1][2];
var p23= data[1][3];
var p30= data[2][0];
var p31= data[2][1];
var p32= data[2][2];
var p33= data[2][3];
var t = factor.t;
/*计算多项式系数 (下同)*/
var cx1 = 3*(p11.x-p10.x);
var bx1 = 3*(p12.x-p11.x)-cx1;
var ax1 = p13.x-p10.x-cx1-bx1;
var cy1 = 3*(p11.y-p10.y);
var by1 = 3*(p12.y-p11.y)-cy1;
var ay1 = p13.y-p10.y-cy1-by1;
var xt1 = ax1*(t*t*t)+bx1*(t*t)+cx1*t+p10.x;
var yt1 = ay1*(t*t*t)+by1*(t*t)+cy1*t+p10.y;
var cx2 = 3*(p21.x-p20.x);
var bx2 = 3*(p22.x-p21.x)-cx2;
var ax2 = p23.x-p20.x-cx2-bx2;
var cy2 = 3*(p21.y-p20.y);
var by2 = 3*(p22.y-p21.y)-cy2;
var ay2 = p23.y-p20.y-cy2-by2;
var xt2 = ax2*(t*t*t)+bx2*(t*t)+cx2*t+p20.x;
var yt2 = ay2*(t*t*t)+by2*(t*t)+cy2*t+p20.y;
var cx3 = 3*(p31.x-p30.x);
var bx3 = 3*(p32.x-p31.x)-cx3;
var ax3 = p33.x-p30.x-cx3-bx3;
var cy3 = 3*(p31.y-p30.y);
var by3 = 3*(p32.y-p31.y)-cy3;
var ay3 = p33.y-p30.y-cy3-by3;
/*计算xt yt的值 */
var xt3 = ax3*(t*t*t)+bx3*(t*t)+cx3*t+p30.x;
var yt3 = ay3*(t*t*t)+by3*(t*t)+cy3*t+p30.y;
factor.t +=factor.speed;
ctx.drawImage("../../images/heart1.png",xt1,yt1,30,30);
ctx.drawImage("../../images/heart2.png",xt2,yt2,30,30);
ctx.drawImage("../../images/heart3.png",xt3,yt3,30,30);
ctx.draw();
if(factor.t>1){
factor.t=0;
cancelAnimationFrame(timer);
that.startTimer();
}else{
timer =requestAnimationFrame(function(){
that.drawImage([[{x:30,y:400},{x:70,y:300},{x:-50,y:150},{x:30,y:0}],[{x:30,y:400},{x:30,y:300},{x:80,y:150},{x:30,y:0}],[{x:30,y:400},{x:0,y:90},{x:80,y:100},{x:30,y:0}]])
})
}}
2.原理:
a.通过绘制三条不同的三阶贝塞尔曲线,选取三张图片让其沿着各自的贝塞尔曲线运动,运动轨迹如下图:
b.计算三阶贝塞尔曲线x(t),y(t)的数学表达式。
三阶贝塞尔曲线是通过四个点来形成一条曲线,两个控制点,一个起点一个终点。
利用多项式系数即可得到x(t),y(t)的数学表达式:
cx = 3 * ( x1 - x0 ) bx = 3 * ( x2 - x1 ) - cx ax = x3 - x0 - cx - bx cy = 3 * ( y1 - y0 ) by = 3 * ( y2 - y1 ) - cy ay = y3 - y0 - cy - by x(t) = ax * t ^ 3 + bx * t ^ 2 + cx * t + x0 y(t) = ay * t ^ 3 + by * t ^ 2 + cy * t + y0
这里画了三条贝塞尔曲线,套用公式三次即可,这里没有采用循环,如果贝塞尔曲线条数比较多时,可采用循环调用 ctx.drawImage,其中factor.t为三阶贝塞尔曲线的参数,取值范围[0,1], 最后调用ctx.draw(),并且设置定时器即可实现图片沿着贝塞尔曲线运动。
3.Tip:
这里采用的定时器是通过requestAnimationFrame()函数实现的, 弃用setInterval的原因是实际测试中有卡帧现象并且动画显示有细微的不连续。
项目地址:
github:https://github.com/jeffer0323/We-Canvas
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# 微信小程序点赞
# 微信小程序组件
# Canvas直播点赞气泡
# 微信小程序 vidao实现视频播放和弹幕的功能
# 微信小程序之video组件视频播放
# 微信小程序使用视频播放器video组件
# 微信小程序开发中的视频播放和直播功能示例代码
# 塞尔
# 坐标值
# 三条
# 第一个
# 中有
# 第二个
# 让其
# 画了
# 大家多多
# 三张
# 如下图
# 先发
# 条数
# 为三
# 不连续
# factor
# JS
# strong
# brush
# class
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
Laravel如何与Inertia.js和Vue/React构建现代单页应用
如何用VPS主机快速搭建个人网站?
网站制作软件有哪些,制图软件有哪些?
Python3.6正式版新特性预览
如何在景安服务器上快速搭建个人网站?
如何快速完成中国万网建站详细流程?
中国移动官方网站首页入口 中国移动官网网页登录
长沙做网站要多少钱,长沙国安网络怎么样?
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
JavaScript模板引擎Template.js使用详解
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】
太平洋网站制作公司,网络用语太平洋是什么意思?
如何在服务器上配置二级域名建站?
JS中对数组元素进行增删改移的方法总结
长沙企业网站制作哪家好,长沙水业集团官方网站?
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作
Linux系统命令中tree命令详解
打造顶配客厅影院,这份100寸电视推荐名单请查收
php静态变量怎么调试_php静态变量作用域调试技巧【解答】
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
如何在Windows服务器上快速搭建网站?
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
使用豆包 AI 辅助进行简单网页 HTML 结构设计
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
JS去除重复并统计数量的实现方法
SQL查询语句优化的实用方法总结
JS碰撞运动实现方法详解
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
网站建设整体流程解析,建站其实很容易!
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
高端建站如何打造兼具美学与转化的品牌官网?
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
如何快速生成可下载的建站源码工具?
详解jQuery停止动画——stop()方法的使用
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
韩国服务器如何优化跨境访问实现高效连接?
javascript中闭包概念与用法深入理解
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
如何快速搭建高效服务器建站系统?
Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门
香港服务器租用费用高吗?如何避免常见误区?
如何快速配置高效服务器建站软件?
linux top下的 minerd 木马清除方法

