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 相关文章推荐
js 数组操作代码集锦
Apr 28 Javascript
javascript 多种搜索引擎集成的页面实现代码
Jan 02 Javascript
js 左右悬浮对联广告代码示例
Dec 12 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
Mar 18 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 Javascript
自学实现angularjs依赖注入
Dec 20 Javascript
基于node.js依赖express解析post请求四种数据格式
Feb 13 Javascript
Bootstrap Table使用整理(二)
Jun 09 Javascript
vue将时间戳转换成自定义时间格式的方法
Mar 02 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
Jul 07 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
Jul 04 Javascript
JS实现商品橱窗特效
Jan 09 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面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
php递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
php登录超时检测功能实例详解
2017/03/21 PHP
Thinkphp集成抖音SDK的实现方法
2020/04/28 PHP
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
javascript实现实时输出当前的时间
2015/04/27 Javascript
JavaScript如何动态创建table表格
2020/08/02 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
js中遍历Map对象的方法
2016/07/27 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
jQuery tip提示插件(实例分享)
2017/04/28 jQuery
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
jquery 获取索引值在一定范围的列表方法
2018/01/25 jQuery
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
[39:00]Optic vs VP 2018国际邀请赛淘汰赛BO3 第三场 8.24
2018/08/25 DOTA
python自动重试第三方包retrying模块的方法
2018/04/24 Python
python爬虫实例详解
2018/06/19 Python
Python银行系统实战源码
2019/10/25 Python
Pycharm Git 设置方法
2020/09/15 Python
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
YSL Beauty加拿大官方商城:圣罗兰美妆加拿大
2017/05/15 全球购物
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
Expedia印度:您的一站式在线旅游网站
2017/08/24 全球购物
周生生珠宝香港官网:Chow Sang Sang(香港及海外配送)
2019/09/05 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
偷看我的初中毕业鉴定
2014/01/29 职场文书
入党自荐书范文
2014/03/09 职场文书
感恩寄语大全
2014/04/11 职场文书
学习计划书怎么写
2014/09/15 职场文书
MySQL sql模式设置引起的问题
2022/05/15 MySQL
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers