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实现树形二级菜单实例代码
Nov 20 Javascript
在JavaScript中使用timer示例
May 08 Javascript
javascript判断变量是否有值的方法
Apr 20 Javascript
基于bootstrap3和jquery的分页插件
Jul 31 Javascript
js获取本机操作系统类型的两种方法
Dec 19 Javascript
浅析javascript函数表达式
Feb 10 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
Jun 28 Javascript
微信小程序 地图定位简单实例
Oct 14 Javascript
AngularJS实现根据不同条件显示不同控件
Apr 20 Javascript
JavaScript类的继承方法小结【组合继承分析】
Jul 11 Javascript
小程序数据通信方法大全(推荐)
Apr 15 Javascript
详解Anyscript开发指南绕过typescript类型检查
Sep 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
一个SQL管理员的web接口
2006/10/09 PHP
?生?D片??C字串
2006/12/06 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
jquery ajax post提交数据乱码
2013/11/05 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
JavaScript的作用域和块级作用域概念理解
2014/09/21 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
原生 JS Ajax,GET和POST 请求实例代码
2016/06/08 Javascript
javaScript基础详解
2017/01/19 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
python获取本机外网ip的方法
2015/04/15 Python
Python安装模块的常见问题及解决方法
2018/02/05 Python
解决Shell执行python文件,传参空格引起的问题
2018/10/30 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
python如何调用百度识图api
2020/09/29 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
快时尚眼镜品牌,全国连锁眼镜店:LOHO眼镜生活
2018/10/08 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
服装促销活动方案
2014/02/23 职场文书
飘柔洗发水广告词
2014/03/14 职场文书
个人对照检查材料思想汇报
2014/09/26 职场文书
2015年三年级班主任工作总结
2015/05/21 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书