介绍
本篇文章为大家展示了使用帆布怎么绘制一个贝赛尔曲线轨迹动画,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
<强>二次贝赛尔曲线强>
/* * *大敌;二次贝塞尔曲线动画 ,* @param , {Array}, start 起点坐标 ,* @param , {Array },曲度点坐标(也就是转弯的点,不是准确的坐标,只是大致的方向) ,* @param , {Array },最终获得终点坐标 ,* @param ,{}数量,percent 绘制百分比(0 - 100) ,*/, function 才能;drawCurvePath(开始,,,,,,%){ ,,,,,,,,,,,ctx.beginPath(),,,,,//开始画线 ,,,,,,,,,,,ctx.moveTo([0]开始,,开始[1]);,,,//画笔移动到起点 ,,,,,,,,,,,for (var t =, 0;, t & lt;=, percent /, 100;, t +=, 0.005), { ,,,,,,,,,,,,,,,//获取每个时间点的坐标 ,,,,,,,,,,,,,,,var x =, quadraticBezier([0]开始,,点[0],[0]结束,,t),,,, ,,,,,,,,,,,,,,,var y =, quadraticBezier(开始[1],分[1],[1],,t); ,,,,,,,,,,,,,,,ctx.lineTo (x, y);,,,//画出上个时间点到当前时间点的直线 ,,,,,,,,,,,} ,,,,,,,,,,,,ctx.stroke();,,,//描边 ,,,,,,,} ,,,,,,, ,,,,,,,/* * *大敌;二次贝塞尔曲线方程 ,* @param , {Array }, start 起点 ,* @param , {Array },曲度点 ,* @param , {Array },最终获得终点 ,* @param ,{}数量,绘制进度(0 - 1) ,*/,,,,function quadraticBezier (p0, p1, p2,, t), { ,,,,,,,,,,,var k =, 1,安康;t; ,,,,,,,,,,,return k *, k *, p0 +, 2, *,(1,安康;t), *, t *, p1 +, t *, t *, p2,, ,,,,,,,}
更加详细的贝塞尔曲线内容请参考这篇博客
放入完整的代码中
& lt; ! DOCTYPE html> & lt; html  lang=癳n"祝辞 & lt; head> ,,,& lt; meta charset=癠TF-8"比; ,,,& lt; meta name=皏iewport",内容=翱矶?设备宽度,初始=1.0,比; ,,,& lt; meta http-equiv=癤-UA-Compatible",内容=癷e=edge"比; ,,,& lt; title>二次贝塞尔曲线动画& lt;/title> ,,,& lt; style> ,,,,,,,,body { ,,,,,,,,,,,背景:,# 0 f1632; ,,,,,,,} ,,,,,,,# canvas { ,,,,,,,,,,,边界:,1 px solid # ccc; ,,,,,,,} ,,,,,,,,# img { ,,,,,,,,,,,显示:,没有,, ,,,,,,,,,,,& lt; ! - img直接隐藏就行,后面会直接引用——比; ,,,,,,,} ,,,,,,, ,,,& lt;/style> & lt;/head> & lt; body> ,,,& lt; canvas id=癱anvas",宽度=?500“,身高=?50“祝辞& lt;/canvas> ,,,& lt; img id=癶ttps://www.yisu.com/zixun/img", src=" https://s3.imgsha.com/2019/04/22/light.png "> <>脚本 var ctx=. getelementbyid(画布).getContext (2 d); var img=. getelementbyid (img); var %=0; var data={ 开始:(400、200), 点:(300、100), 结束:(100、400), 部门:“数据1 ', 值:4321 } init()函数{ %=0;//每次重置进程 画(); } 函数画(){ ctx。clearRect (0, 0, 1500, 750);//每次清除画布 ctx。strokeStyle=? ffffff”;//设置线条样式 drawCurvePath(数据。首先,数据。点,数据。最终,百分比); % +=0.8;//进程增加,这个控制动画速度 如果(% <=100){//没有画完接着调用,画完的话重置进度 requestAnimationFrame(画); null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null使用帆布怎么绘制一个贝赛尔曲线轨迹动画