canvas绘制爱心
欢迎加入前端交流群交流知识获取视频资料:
需求:绘制爱心图像轨迹。
实现:直接贴代码吧!
预览地址: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>
canvas绘制爱心的更多相关文章
- canvas绘制爱心的几种方法
第一种方法:桃心形公式 代码实现的一种方法 <!DOCTYPE html> <html lang="en"> <head> <meta c ...
- js利用canvas绘制爱心
js代码如下: var cav = document.getElementById("a").getContext("2d"); function draw(x ...
- HTML5学习总结——canvas绘制象棋(canvas绘图)
一.HTML5学习总结——canvas绘制象棋 1.第一次:canvas绘制象棋(笨方法)示例代码: <!DOCTYPE html> <html> <head> & ...
- 用canvas绘制折线图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 封装 用canvas绘制直线的函数--面向对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 学习笔记:HTML5 Canvas绘制简单图形
HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...
- canvas绘制经典折线图(一)
最终效果图如下: 实现步骤如下:注-引用了jQuery HTML代码 <!doctype html> <html lang="en"> <head&g ...
- Canvas绘制图形
1.Canvas绘制一个蓝色的矩形 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...
- [canvas]利用canvas绘制自适应的折线图
前段时间学习了用canvas绘制折现图,且当画布变换大小,折现图会随之变化,现附上代码 <!DOCTYPE html> <html lang="en"> & ...
随机推荐
- ORACLE.错误码 ORA-12154 及Oracle客户端免安装版的设置
.错误码 ORA-12154相信作为ORACLE数据库的开发人员没有少碰到“ORA-12154: TNS: 无法解析指定的连接标识符”,今天我也又碰到了类似的情况,将我的解决方法进行小结,希望能对碰到 ...
- shopping car 1.0
#!/usr/bin/env python# -*- coding: utf-8 -*-# @File : 20180510001.py# @Author: Anthony.waa# @Date : ...
- 洛谷P2607 [ZJOI2008]骑士(树形dp)
题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里, ...
- Java基础7一面向对象
1.构造方法: (1)定义:方法名称必须和类名相同,没有返回值,也没有void (2)语法: [访问修饰符] 类名(){ } (3)作用:创建对象.初始化成员变量. (4)构造方法的分类: A.无参数 ...
- 第八周读书笔记(人月神话X月亮与六便士)——到底什么才是一个程序员的自我修养?
写了这么久的读书笔记,涉及到问题大多是一些如何把软件工程做好,如何把自己的职业生涯做好.但总感觉逻辑链上缺了一环,亦即:我们为什么要把软件工程做好,我们成为一名优秀的职业生涯的意义到底在于什么?我觉得 ...
- Find Bugs
为什么没有早点知道有这么好用的插件呢?
- PHP中each与list用法分析
1.each的用法 先看API array each ( array &$array ) api里是这么描述的:each — 返回数组中当前的键/值对并将数组指针向前移动一步 我们先来看看返回 ...
- jenkins+testlink+python搭建自动化测试环境
一. 环境搭建 jenkins安装与配置请参考我的另一篇博文:https://www.cnblogs.com/wuxunyan/p/9592953.html testlink安装请参考博文:https ...
- [网络流24题] 最长k可重线段集问题 (费用流)
洛谷传送门 LOJ传送门 最长k可重区间集问题的加强版 大体思路都一样的,不再赘述,但有一些细节需要注意 首先,坐标有负数,而且需要开$longlong$算距离 但下面才是重点: 我们把问题放到了二维 ...
- Hibernate Session操作
1.增加 @Test public void add(){ Configuration cfg=new Configuration().configure(); SessionFactory fact ...