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日历功能对象
Jan 12 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
Jun 09 Javascript
javascript浏览器兼容教程之事件处理
Jun 09 Javascript
Node.js中child_process实现多进程
Feb 03 Javascript
jQuery往返城市和日期查询实例讲解
Oct 09 Javascript
jquery插件autocomplete用法示例
Jul 01 Javascript
微信小程序 定位到当前城市实现实例代码
Feb 23 Javascript
angular.js 路由及页面传参示例
Feb 24 Javascript
Angular2利用组件与指令实现图片轮播组件
Mar 27 Javascript
微信小程序云开发详细教程
May 16 Javascript
用Vue.js方法创建模板并使用多个模板合成
Jun 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的ddos攻击解决方法
2015/01/08 PHP
PHP利用APC模块实现文件上传进度条的方法
2015/01/26 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
2016/12/19 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
javascript onmouseout 解决办法
2010/07/17 Javascript
Js+Flash实现访问剪切板操作
2012/11/20 Javascript
javascript的解析执行顺序在各个浏览器中的不同
2014/03/17 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
js变量提升深入理解
2016/09/16 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
AngularJS执行流程详解
2017/02/17 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
[03:02]辉夜杯主赛事第二日 每日之星
2015/12/27 DOTA
详细解读Python中解析XML数据的方法
2015/10/15 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
使用Python函数进行模块化的实现
2019/11/15 Python
浅谈python出错时traceback的解读
2020/07/15 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
美国体育用品在线:Modell’s Sporting Goods
2018/06/07 全球购物
乡镇交通安全实施方案
2014/03/29 职场文书
汉语言文学毕业求职信
2014/07/17 职场文书
教育实践活动对照检查材料
2014/09/23 职场文书
离婚财产分配协议书
2014/10/21 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
2016新年年会主持词
2015/07/06 职场文书
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS