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实现通用的内容渐显Tab选项卡效果
Sep 07 Javascript
理解javascript定时器中的单线程
Feb 23 Javascript
Bootstrap学习笔记之js组件(4)
Jun 12 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
Angular2自定义分页组件
Apr 19 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 Javascript
webpack优化的深入理解
Dec 10 Javascript
javascript使用substring实现的展开与收缩文字功能示例
Jun 17 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
Aug 04 Javascript
webpack DllPlugin xxx is not defined解决办法
Dec 13 Javascript
Vue中多元素过渡特效的解决方案
Feb 05 Javascript
解决vue下载后台传过来的乱码流的问题
Dec 05 Vue.js
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 session有效期问题
2009/04/26 PHP
深入了解PHP类Class的概念
2012/06/14 PHP
PHP+MySQL存储数据常见中文乱码问题小结
2016/06/13 PHP
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
深入理解js promise chain
2016/05/05 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
django使用xlwt导出excel文件实例代码
2018/02/06 Python
python实现俄罗斯方块
2018/06/26 Python
Python中的取模运算方法
2018/11/10 Python
简单了解python中对象的取反运算符
2019/07/01 Python
python调试神器PySnooper的使用
2019/07/03 Python
python实现图像拼接功能
2020/03/23 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
CSS3 Calc实现滚动条出现页面不跳动问题
2017/09/14 HTML / CSS
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
大学考试作弊检讨书
2014/01/30 职场文书
结婚周年感言
2014/02/24 职场文书
出生公证委托书
2014/04/03 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
校园安全广播稿范文
2014/09/25 职场文书
批评与自我批评总结
2014/10/17 职场文书
煤矿安全保证书
2015/02/27 职场文书
2015年派出所工作总结
2015/04/24 职场文书
感动中国何玥观后感
2015/06/02 职场文书
教你利用Selenium+python自动化来解决pip使用异常
2021/05/20 Python