先发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
相关文章:
宝塔面板创建网站无法访问?如何快速排查修复?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
建站之星如何助力网站排名飙升?揭秘高效技巧
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何通过NAT技术实现内网高效建站?
无锡营销型网站制作公司,无锡网选车牌流程?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
如何在万网主机上快速搭建网站?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何选择靠谱的建站公司加盟品牌?
建站168自助建站系统:快速模板定制与SEO优化指南
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
哈尔滨网站建设策划,哈尔滨电工证查询网站?
宝塔新建站点为何无法访问?如何排查?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
浅谈Javascript中的Label语句
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何制作一个表白网站视频,关于勇敢表白的小标题?
C#如何使用XPathNavigator高效查询XML
建站之星导航如何优化提升用户体验?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
建站之星2.7模板快速切换与批量管理功能操作指南
建站之星价格显示格式升级,你的预算足够吗?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
建站之星Pro快速搭建教程:模板选择与功能配置指南
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
如何高效搭建专业期货交易平台网站?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
定制建站流程解析:需求评估与SEO优化功能开发指南
建站之星安装需要哪些步骤及注意事项?
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
建站主机类型有哪些?如何正确选型
济南企业网站制作公司,济南社保单位网上缴费步骤?
威客平台建站流程解析:高效搭建教程与设计优化方案
建站VPS选购需注意哪些关键参数?
英语简历制作免费网站推荐,如何将简历翻译成英文?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何通过VPS建站实现广告与增值服务盈利?
如何通过商城免费建站系统源码自定义网站主题?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
南平网站制作公司,2025年南平市事业单位报名时间?
,交易猫的商品怎么发布到网站上去?
如何正确下载安装西数主机建站助手?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
常州企业网站制作公司,全国继续教育网怎么登录?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
*请认真填写需求信息,我们会在24小时内与您取得联系。