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 相关文章推荐
jQuery 学习第五课 Ajax 使用说明
May 17 Javascript
js性能优化 如何更快速加载你的JavaScript页面
Mar 17 Javascript
JS表的模拟方法
Feb 05 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
Feb 15 Javascript
Vue.js实现表格动态增加删除的方法(附源码下载)
Jan 20 Javascript
node.js利用redis数据库缓存数据的方法
Mar 01 Javascript
JS 调试中常见的报错问题解决方法
May 20 Javascript
Angular4学习教程之DOM属性绑定详解
Jan 04 Javascript
详解使用React制作一个模态框
Mar 14 Javascript
vue+element实现表格新增、编辑、删除功能
May 28 Javascript
详解微信小程序开发(项目从零开始)
Jun 06 Javascript
Vue项目中如何使用Axios封装http请求详解
Oct 23 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
PHP中运用jQuery的Ajax跨域调用实现代码
2012/02/21 PHP
浅谈apache和nginx的rewrite的区别
2013/02/22 PHP
php的webservice的wsdl的XML无法显示问题的解决方法
2014/03/11 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
微信支付的开发流程详解
2016/09/13 PHP
javascript 内存回收机制理解
2011/01/17 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
2017/06/29 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
Python 结巴分词实现关键词抽取分析
2017/10/21 Python
Python实现识别手写数字 Python图片读入与处理
2020/03/23 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
python通过TimedRotatingFileHandler按时间切割日志
2019/07/17 Python
基于python实现计算两组数据P值
2020/07/10 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
经典c++面试题三
2015/07/08 面试题
请解释接口的显式实现有什么意义
2012/05/26 面试题
教师岗位聘任书范文
2014/03/29 职场文书
民族团结先进个人事迹材料
2014/06/02 职场文书
大学生毕业评语
2014/12/31 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技