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 操作日期、星期、元素的追加的实现代码
Feb 07 Javascript
Javascript 鼠标移动上去 滑块跟随效果代码分享
Nov 23 Javascript
javascript实时显示当天日期的方法
May 20 Javascript
详解Javascript模板引擎mustache.js
Jan 20 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
原生js实现可拖拽效果
Feb 28 Javascript
webpack公共组件引用路径简化小技巧
Jun 15 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
Apr 10 Javascript
详解小程序用户登录状态检查与更新实例
May 15 Javascript
jquery添加div实现消息聊天框
Feb 08 jQuery
js抽奖转盘实现方法分析
May 16 Javascript
vue中axios封装使用的完整教程
Mar 03 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数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
2016/01/28 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
对google个性主页的拖拽效果的js的完整注释[转]
2007/04/10 Javascript
js查找父节点的简单方法
2008/06/28 Javascript
javascript 文档的编码问题解决
2009/03/01 Javascript
表单验证的完整应用案例探讨
2013/03/29 Javascript
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
JavaScript中利用各种循环进行遍历的方式总结
2015/11/10 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
JS文件/图片从电脑里面拖拽到浏览器上传文件/图片
2017/03/08 Javascript
初探js和简单隐藏效果的实例
2017/11/23 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
2020/09/10 Javascript
速记Python布尔值
2017/11/09 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
python3.5 tkinter实现页面跳转
2018/01/30 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
在python中对变量判断是否为None的三种方法总结
2019/01/23 Python
Python散点图与折线图绘制过程解析
2019/11/30 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
python3实现简单飞机大战
2020/11/29 Python
阿里巴巴国际站:Alibaba.com
2016/07/21 全球购物
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
开门红主持词
2014/04/02 职场文书