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滑动门代码
Dec 19 Javascript
基于jquery中children()与find()的区别介绍
Apr 26 Javascript
基于jQuery实现表单提交验证
Nov 24 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
Oct 08 Javascript
浅析AngularJS Filter用法
Dec 28 Javascript
JS实现添加,替换,删除节点元素的方法
Jun 30 Javascript
Angularjs使用directive自定义指令实现attribute继承的方法详解
Aug 05 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
Aug 10 Javascript
JS动态给对象添加属性和值的实现方法
Oct 21 Javascript
Angular-Touch库用法示例
Dec 22 Javascript
基于Vue开发数字输入框组件
Dec 19 Javascript
JS扁平化输出数组的2种方法解析
Sep 17 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
php header Content-Type类型小结
2011/07/03 PHP
PHP面向对象概念
2011/11/06 PHP
php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
2013/09/28 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
2012/03/14 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
Javascript中使用A标签获取当前目录的绝对路径方法
2015/03/02 Javascript
WordPress中利用AJAX技术进行评论提交的实现示例
2016/01/12 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
javascript实现页面滚屏效果
2017/01/17 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
jQuery插件jsonview展示json数据
2018/05/26 jQuery
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
[40:57]TI4 循环赛第二日 iG vs EG
2014/07/11 DOTA
python常见的格式化输出小结
2016/12/15 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
python圣诞树编写实例详解
2020/02/13 Python
python 回溯法模板详解
2020/02/26 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
毕业生自我鉴定
2013/12/04 职场文书
机关搬迁方案
2014/05/18 职场文书
酒店开业策划方案
2014/06/02 职场文书
安全月宣传标语
2014/10/07 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
男生贾里读书笔记
2015/06/30 职场文书
python APScheduler执行定时任务介绍
2022/04/19 Python