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 设置某DIV区域内的checkbox复选框
Nov 30 Javascript
javascript 验证日期的函数
Mar 18 Javascript
js对象数组按属性快速排序
Jan 31 Javascript
关于js遍历表格的实例
Jul 10 Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 Javascript
jQuery获取file控件中图片的宽高与大小
Aug 04 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
Jul 12 Javascript
Vue的Flux框架之Vuex状态管理器
Jul 30 Javascript
关于在vue 中使用百度ueEditor编辑器的方法实例代码
Sep 14 Javascript
js笔试题-接收get请求参数
Jun 15 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 Javascript
JavaScript中window和document用法详解
Jul 28 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 高手之路(一)
2006/10/09 PHP
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
VPS中使用LNMP安装WordPress教程
2014/12/28 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
php+laravel依赖注入知识点总结
2019/11/04 PHP
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
jquery插入兄弟节点的操作方法
2016/12/07 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
vue 取出v-for循环中的index值实例
2019/11/09 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
Python3实现从指定路径查找文件的方法
2015/05/22 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
python os用法总结
2018/06/08 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
python绘制彩虹图
2019/12/16 Python
Python tcp传输代码实例解析
2020/03/18 Python
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
护理专业毕业生自荐信范文
2014/01/05 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
公证书样本
2014/04/10 职场文书
跳槽求职信范文
2014/05/26 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
搞笑婚前保证书
2015/02/28 职场文书
2015年度个人思想工作总结
2015/04/08 职场文书
高二数学教学反思
2016/02/18 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers