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 Sort 表格排序
Oct 31 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
Feb 04 Javascript
JavaScript删除指定子元素代码实例
Jan 13 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
Jun 21 Javascript
基于jQuery实现滚动切换效果
Dec 02 Javascript
Angular的MVC和作用域
Dec 26 Javascript
canvas实现粒子时钟效果
Feb 06 Javascript
JavaScript Uploadify文件上传实例
Feb 28 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
May 25 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
Feb 04 Javascript
JavaScript变量声明var,let.const及区别浅析
Apr 23 Javascript
解决Vue+Element ui开发中碰到的IE问题
Sep 03 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
thinkphp的c方法使用示例
2014/02/24 PHP
Thinkphp框架开发移动端接口(2)
2016/08/18 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
一个不错的js html页面倒计时可精确到秒
2014/10/22 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
Perl Substr()函数及函数的应用
2015/12/16 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
jquery购物车结算功能实现方法
2020/10/29 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
js中作用域的实例解析
2017/03/16 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
值得收藏的八个常用的js正则表达式
2018/10/19 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
unittest+coverage单元测试代码覆盖操作实例详解
2018/04/04 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
Python之多进程与多线程的使用
2021/02/23 Python
国际鲜花速递专家:Floraqueen
2016/11/24 全球购物
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
师德师风承诺书
2014/05/23 职场文书
空气环保标语
2014/06/12 职场文书
小学生作文评语集锦
2014/12/25 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python
Python自动化测试PO模型封装过程详解
2021/06/22 Python
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
JS实现简单的九宫格抽奖
2022/06/28 Javascript