canvas绘制爱心的几种方法总结(推荐)


Posted in Javascript onOctober 31, 2017

第一种方法

canvas绘制爱心的几种方法总结(推荐)

代码实现的一种方法

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>使用桃心形方程绘制爱心</title>
</head>
<body>
 <canvas></canvas>
 <script>
 var canvas = document.querySelector('canvas');
 var ctx = canvas.getContext('2d');
 canvas.width = window.innerWidth;
 canvas.height = window.innerHeight;
 var Heart = function(x, y) {
  this.x = x;
  this.y = y;
  this.vertices = [];
  for(let i=0; i<30; i++) {
  var step = i / 30 * (Math.PI * 2);//设置心上面两点之间的角度,具体分成多少份,好像需要去试。
  var vector = {
   x : (15 * Math.pow(Math.sin(step), 3)),
   y : -(13 * Math.cos(step) - 5 * Math.cos(2 * step) - 2 * Math.cos(3 * step) - Math.cos(4 * step))
  }
  this.vertices.push(vector);
  }
 }
 Heart.prototype.draw = function() {
  ctx.translate(-1000,this.y);//这一步跟ctx.shadowOffsetX必须一起使用,不明白为啥?
  ctx.beginPath();
  for(let i=0; i<30; i++) {
  var vector = this.vertices[i];
  ctx.lineTo(vector.x, vector.y);
  }
  ctx.shadowColor = "red";
  ctx.shadowOffsetX = this.x+1000;
  ctx.fill();
 }
 canvas.onmousedown = function(e) {
  var x = e.offsetX;
  var y = e.offsetY;
  var heart = new Heart(x, y);
  heart.draw();
 }
 </script>
</body>
</html>

代码里面有两处地方不明白 ctx.translate(-1000,this.y); ctx.shadowOffsetX = this.x+1000; 能感觉出来什么意思,但是不知道为啥要加上,去掉就不行了。请路过的各位大佬们帮忙解答一下~~

以上这篇canvas绘制爱心的几种方法总结(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript原型继承之基础机制分析
Aug 26 Javascript
Jquery修改页面标题title其它JS失效的解决方法
Oct 31 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
Feb 20 Javascript
用AngularJS的指令实现tabs切换效果
Aug 31 Javascript
JS实现超简单的汉字转拼音功能示例
Dec 22 Javascript
JavaScript函数参数的传递方式详解
Mar 06 Javascript
解决Vue编译时写在style中的路径问题
Sep 21 Javascript
小程序云开发部署攻略(图文教程)
Oct 30 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
vue实现日历备忘录功能
Sep 24 Javascript
帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)
Aug 23 Javascript
Javascript异步流程控制之串行执行详解
Sep 27 Javascript
ES6扩展运算符用法实例分析
Oct 31 #Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
Oct 31 #Javascript
JavaScript实现QQ列表展开收缩扩展功能
Oct 30 #Javascript
帝国cms首页列表页实现点赞功能
Oct 30 #Javascript
微信小程序商品详情页规格属性选择示例代码
Oct 30 #Javascript
AngularJS中scope的绑定策略实例分析
Oct 30 #Javascript
JavaScript数组push方法使用注意事项
Oct 30 #Javascript
You might like
jQuery 打造动态下滑菜单实现说明
2010/04/15 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
JS中获取函数调用链所有参数的方法
2015/05/07 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
详解AngularJs中$resource和restfu服务端数据交互
2016/09/21 Javascript
JS取模、取商及取整运算方法示例
2016/10/13 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
JS中实现函数return多个返回值的实例
2017/02/21 Javascript
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
[00:12]2018DOTA2亚洲邀请赛 Sccc亮相SOLO赛,今年他又会有什么样的战绩?
2018/04/06 DOTA
[53:10]Secret vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
Python语言快速上手学习方法
2018/12/14 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
selenium+python自动化78-autoit参数化与批量上传功能的实现
2021/03/04 Python
英国户外玩具儿童游乐设备网站:TP Toys(蹦床、攀爬框架、秋千、滑梯和游戏屋)
2018/04/09 全球购物
Java编程面试题
2016/04/04 面试题
客服专员岗位职责范本
2013/11/29 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
交通志愿者活动总结
2014/06/27 职场文书
2014年青年志愿者工作总结
2014/12/09 职场文书
师德先进个人材料
2014/12/20 职场文书
python识别围棋定位棋盘位置
2021/07/26 Python
警用民用对讲机找不同
2022/02/18 无线电