欢迎加入前端交流群交流知识获取视频资料:

需求:绘制爱心图像轨迹。

实现:直接贴代码吧!

预览地址:https://codepen.io/wzc570738205/pen/dqqBpj

<!DOCTYPE>
<html> <head>
<meta charset="UTF-8">
<title>模仿笔画</title>
<style type="text/css">
#_canvas {
background-color: rgb(, , );
border: 1px solid #;
}
</style>
</head> <body> <canvas id="_canvas" width="" height=''>sorry, your broswer does not support html5!</canvas> <script type="text/javascript">
var canvas_ = document.getElementById("_canvas");
var context = canvas_.getContext("2d");
//线条设置
context.strokeStyle = "red";
context.lineWidth = ; //线条数组
var array_paint = []; //背景图
var img = new Image()
img.src = "https://ws1.sinaimg.cn/large/0065nu1aly1fv5kg78i8kj30xc0m8ank.jpg"
context.drawImage(img, , ); function paint() {
context.beginPath();
context.moveTo(array_paint[][], array_paint[][]);
if (array_paint.length == )
context.lineTo(array_paint[][] + , array_paint[][] + );
else {
var i = ;
for (i in array_paint) {
context.lineTo(array_paint[i][], array_paint[i][]);
context.moveTo(array_paint[i][], array_paint[i][]);
} }
context.closePath();
context.stroke();
} let num = -;
let timer = null;
let list = []
//创建坐标
list = heartShape(, , ) function people() {
num++;
var imgpeople = new Image()
imgpeople.src = "https://ws1.sinaimg.cn/large/0065nu1aly1fvcmafdhe6j305k05k3ye.jpg"
context.drawImage(imgpeople, list[num].current_x * / - , list[num].current_y * / - , ,
);
context.clearRect(, , screen.width, screen.height);
context.drawImage(img, , ); console.log(list[num].current_x * / );
if (num < list.length - ) {
let current_x = (Math.random() * ).toFixed();
let current_y = (Math.random() * ).toFixed();
array_paint.push([list[num].current_x * / , list[num].current_y * / ]);
paint();
if (num > ) {
context.drawImage(imgpeople, list[num].current_x * / - , list[num].current_y * / -
, , );
}
} else {
array_paint = [];
for (var i = ; i < list.length; i++) {
array_paint.push([list[i].current_x * / , list[i].current_y * / ]);
paint();
context.drawImage(imgpeople, list[num].current_x * / - , list[num].current_y * / -
, , );
}
clearInterval(timer);
} } timer = setInterval(people, ) function heartShape(r, dx, dy) { //r:大小;dx:水平偏移;dy:垂直偏移;c:颜色
var m, n, x, y, i;
let arr = [];
for (i = ; i <= 7.9; i += 0.04) {
m = i;
n = -r * (((Math.sin(i) * Math.sqrt(Math.abs(Math.cos(i)))) / (Math.sin(i) + 1.4)) - * Math.sin(i) +
);
x = n * Math.cos(m) + dx;
y = n * Math.sin(m) + dy;
arr.push({
current_x: x,
current_y: y
})
}
return arr
}
</script>
</body> </html>

最新文章

  1. POJ 3422 Kaka&#39;s Matrix Travels
  2. #研发解决方案介绍#基于ES的搜索+筛选+排序解决方案
  3. windows下 nvm下载node被墙了解决办法
  4. C#异步编程简单的运用
  5. leetcode 141
  6. HTML+CSS学习笔记(9)- CSS的继承、层叠和特殊性
  7. java 基础之数据类型
  8. hadoop的相关资料链接
  9. Linux find常见用法示例
  10. linux系统防火墙对访问服务器的影响
  11. Winform获取应用程序的当前路径的方法集合(转)
  12. OpenSUSE13.2安装MongoDB
  13. Python3基础 函数 收集参数+普通参数 的示例
  14. ArcGisEngine图层操作(随笔,不全)
  15. 前端入门20-JavaScript进阶之异步回调的执行时机
  16. 模拟赛20181015 Uva1078 bfs+四维dp
  17. [HNOI2003]消防局的设立 树形dp // 贪心
  18. java并发之线程间通信
  19. Future Clalback使用案例
  20. Greenplum-cc-web监控软件安装

热门文章

  1. VirtualBox里如何正确安装增强工具(图文详解)
  2. 通过阅读《React 进阶之路》之学习笔记
  3. 在windows系统下虚拟机和ubuntu系统的安装和卸载
  4. 用css修改HTML5 input placeholder颜色
  5. java 读取配置文件(nx就转了)
  6. PHP Base64 加密 &amp; 解密
  7. codeforces 789 B. Masha and geometric
  8. day06-08面向对象的三大特性
  9. [luogu3203 HNOI2010] 弹飞绵羊 (分块)
  10. [luogu2272 ZJOI2007] 最大半连通子图 (tarjan缩点 拓扑排序 dp)