canvas纯绘制雨伞、飞机、五角星、桃心,无逻辑
由于网上很多都是用很多算法和逻辑使用canvas进行绘制,但有时也无法解决一些小众需求
。
为了满足需求不能写运算纯手写,感觉真的很浪费时间,只有自己踩过的坑,才不想看到别人也被坑。我很懒,也想过弄个工具,目前先放代码吧,方便需要的人copy。
<canvas> H5标签,只是图形容器,您必须使用脚本来绘制图形。
lineTo() 方法 添加一个新点,然后创建从该点到画布中最后指定点的线条
bezierCurveTo() 方法 通过使用表示三次贝塞尔曲线的指定控制点,向当前路径添加一个点
提示:三次贝塞尔曲线需要三个点。前两个点是用于三次贝塞尔计算中的控制点,第三个点是曲线的结束 点。曲线的开始点是当前路径中最后一个点。如果路径不存在,那么请使用 beginPath() 和 moveTo() 方 法来定义开始点。
说明:网上有高级算法的绘制,很灵活也很方便,如果不是特使情况,千万别用我的方法,请上网右转看别人的案例,哈哈。
☆ canvas画布节点(仅供参考)
<canvas id="myCanvas" width="264" height="264" style="border:red 1px solid;position:absolute;top:0;left:0"></canvas>
1. 雨伞
<script type="text/javascript">
function draw(id) {
var canvas=document.getElementById(id);
if(canvas==null)
return false;
var ctx=canvas.getContext('2d');
ctx.beginPath();
// 小雨点
ctx.moveTo(47,32);
ctx.bezierCurveTo(40,42,38,56,46,60);
ctx.bezierCurveTo(64,52,50,40,47,32);
// 大雨点
ctx.moveTo(78,32);
ctx.bezierCurveTo(70,44,62,66,78,70);
ctx.bezierCurveTo(104,60,80,40,78,32);
// 伞身
ctx.moveTo(44,118);
ctx.bezierCurveTo(48,114,50,90,72,76);
ctx.bezierCurveTo(82,82,104,70,102,54);
ctx.bezierCurveTo(138,26,222,76,224,118);
ctx.lineTo(146,118);
ctx.lineTo(146,200);
ctx.bezierCurveTo(147,212,162,216,162,192);
ctx.bezierCurveTo(168,188,172,186,178,192);
ctx.bezierCurveTo(180,200,182,218,162,231);
ctx.bezierCurveTo(154,240,116,226,122,200);
ctx.lineTo(122,118);
ctx.lineTo(44,118);
var gradient=ctx.createRadialGradient(0,0,0,0,0,150);
gradient.addColorStop(0,"rgba(244,28,285,0.1)");
gradient.addColorStop(1,"rgba(255,255,255,1)");
ctx.strokeStyle = "red"; //设置或返回用于笔触的颜色、渐变
ctx.stroke();
ctx.fillStyle=gradient;
ctx.fill();
}
</script>
2. 飞机
<script type="text/javascript">
function draw(id) {
var canvas=document.getElementById(id);
if(canvas==null)
return false;
var ctx=canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(65,50);
ctx.lineTo(156,70);
ctx.lineTo(190,38);
ctx.bezierCurveTo(222,10,250,40,230,70);
ctx.lineTo(195,106);
ctx.lineTo(218,204);
ctx.lineTo(186,228);
ctx.lineTo(150,146);
ctx.lineTo(110,186);
ctx.bezierCurveTo(118,200,126,220,98,234);
ctx.lineTo(30,162);
ctx.bezierCurveTo(30,134,70,140,78,152);
ctx.lineTo(118,114);
ctx.lineTo(40,78);
ctx.lineTo(65,50);
/*ctx.bezierCurveTo(75,37,70,25,50,25);
ctx.bezierCurveTo(20,25,22,62.5,22,55);
ctx.bezierCurveTo(20,80,40,102,75,120);
ctx.bezierCurveTo(110,102,130,80,128,55);
ctx.bezierCurveTo(128,55,130,25,100,25);
ctx.bezierCurveTo(85,25,75,37,75,40);*/
var gradient=ctx.createRadialGradient(0,0,0,0,0,150);
gradient.addColorStop(0,"rgba(244,28,285,0.1)");
gradient.addColorStop(1,"rgba(255,255,255,1)");
ctx.strokeStyle = "red"; //设置或返回用于笔触的颜色、渐变
ctx.stroke();
ctx.fillStyle=gradient;
ctx.fill();
}
</script>
3. 五角星
<script>
//function init() {
var canvas = document.getElementById('stars');
var ctx = canvas.getContext('2d');
ctx.fillStyle = "#827839";
//ctx.shadowColor = "#000000";
ctx.shadowOffsetX = 1;
ctx.shadowOffsetY = 12;
ctx.shadowBlur = 18;
// 开始一条新路径
ctx.beginPath();
/*ctx.moveTo(15,150) +30 -8
ctx.lineTo(100,140); // 2
ctx.lineTo(170,80); // 3
ctx.lineTo(230,140); // 4
ctx.lineTo(315,150); // 5
ctx.lineTo(230,200); // 6
ctx.lineTo(300,263); // 7
ctx.lineTo(170,220); // 8
ctx.lineTo(30,263); // 9
ctx.lineTo(100,200); // 10
//ctx.lineTo(15,150); // 结束
ctx.closePath();
ctx.fill();*/
ctx.moveTo(45,142); // 起点
ctx.lineTo(129,126); // 2
ctx.lineTo(172,40); // 3
ctx.lineTo(215,126); // 4
ctx.lineTo(299,142); // 5
ctx.lineTo(240,203); // 6
ctx.lineTo(252,288); // 7
ctx.lineTo(172,252); // 8
ctx.lineTo(92,288); // 9
ctx.lineTo(105,203); // 10
//ctx.lineTo(15,150); // 结束
ctx.closePath();
ctx.fill();
//}
//window.addEventListener("load",init.false);
</script>
4. 桃心
<script type="text/javascript">
function draw(id) {
var canvas=document.getElementById(id);
if(canvas==null)
return false;
var ctx=canvas.getContext('2d');
ctx.beginPath();
ctx.moveTo(75,40);
ctx.bezierCurveTo(75,37,70,25,50,25);
ctx.bezierCurveTo(20,25,22,62.5,22,55);
ctx.bezierCurveTo(20,80,40,102,75,120);
ctx.bezierCurveTo(110,102,130,80,128,55);
ctx.bezierCurveTo(128,55,130,25,100,25);
ctx.bezierCurveTo(85,25,75,37,75,40);
var gradient=ctx.createRadialGradient(0,0,0,0,0,150);
gradient.addColorStop(0,"rgba(244,28,285,0.5)");
gradient.addColorStop(1,"rgba(255,255,255,1)");
ctx.fillStyle=gradient;
ctx.fill();
}
</script>
个人公众号(ZEROFC_DEV),关于web开发的,欢迎关注O(∩_∩)O~

canvas纯绘制雨伞、飞机、五角星、桃心,无逻辑的更多相关文章
- HTML5使用Canvas来绘制图形
一.Canvas标签: 1.HTML5<canvas>元素用于图形的绘制,通过脚本(通常是javascript)来完成. 2.<canvas>标签只是图形容器,必须使用脚本来绘 ...
- 软件项目技术点(7)——在canvas上绘制自定义图形
AxeSlide软件项目梳理 canvas绘图系列知识点整理 图形种类 目前我们软件可以绘制出来的形状有如下这几种,作为开发者我们一直想支持用户可以拖拽的类似word里面图形库,但目前还没有找到比 ...
- 安卓自己定义View进阶-Canvas之绘制基本形状
Canvas之绘制基本形状 作者微博: @GcsSloop [本系列相关文章] 在上一篇自己定义View分类与流程中我们了解自己定义View相关的基本知识,只是,这些东西依然还是理论,并不能拿来(zh ...
- canvas快速绘制圆形、三角形、矩形、多边形
想看前面整理的canvas常用API的同学可以点下面: canvas学习之API整理笔记(一) canvas学习之API整理笔记(二) 本系列文章涉及的所有代码都将上传至:项目代码github地址,喜 ...
- 用html5的canvas画布绘制贝塞尔曲线
查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...
- HTML5在canvas中绘制复杂形状附效果截图
HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路 ...
- Canvas 2D绘制抗锯齿的1px线条
当绘制1像素的线条时,发现多条线明显存在着粗细不均的问题,线条带有明显的锯齿. 事实上,Canvas的绘制线条指令都存在这个状况,如lineTo,arcTo,strokeRect. 解决方案是将Can ...
- HTML5 canvas标签绘制正三角形 鼠标按下点为中间点,鼠标抬起点为其中一个顶点
用html5的canvas标签绘制圆.矩形比较容易,绘制三角形,坐标确定相当于前面两种难点,这里绘制的是正三角形,比较容易,我们只需要把鼠标刚按下去的点设置为三角形的中心点,鼠标抬起的点设置为三角形右 ...
- Canvas上绘制几何图形
重要的类自定义View组件要重写View组件的onDraw(Canvase)方法,接下来是在该 Canvas上绘制大量的几何图形,点.直线.弧.圆.椭圆.文字.矩形.多边形.曲线.圆角矩形,等各种形状 ...
随机推荐
- JAVA学习路线——匹马行天下
- IDEA 图标介绍。 缓存和索引介绍、清理方法和Debug使用
一.图标 二.缓存和索引 IntelliJ IDEA 的缓存和索引主要是用来加快文件查询,从而加快各种查找.代码提示等操作的速(上图中的图标能这样显示也是靠索引).某些特殊条件下,IntelliJ I ...
- U-boot的编译方式及目录结构解析
U-boot的整体结构和linux基本类似,编译方式一般也是非常类似的,一般的编译命令: make CROSS_COMPILE=arm-linux-gnueabihf- XXX(目标名) 清除命令: ...
- opus在arm的嵌入式平台上的移植和开发
最近产品中要用到opus,圣上一声令下,把opus移植到我们平台上,什么?opus?opus是什么?在一脸 茫然中,我这特种兵码农就赤手空拳上战场了. 废话少说,赶紧在网站:https://opus- ...
- Python3自动化运维之Fabric模版详解
一.概要 Fabric是基于Python(2.7,3.4+以上版本)实现的SSH命令行工具,简化了SSH的应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括 ...
- 【转】php结合redis实现高并发下的抢购、秒杀功能
抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存 ...
- Linux编程 2 (遍历目录cd与查看文件和目录ls)
一. 遍历目录 在 linux系统上,可以使用cd切换目录命令. 分二种路径,一是绝对文件路径,另一种是相对文件路径. 1. 绝对文件路径 在虚拟目录中采用文件路径,以虚拟目录根目录开始,相当于 ...
- Java:类与对象概念
什么是类? 怎样定义一个类? 什么是对象,类和对象之间是什么关系,怎样创建一个对象? 对象引用和对象在内存中是如何分配的? 什么是类? 1. 类是具有相同的属性和功能的事物的抽象的集合,在面向对象 ...
- js判断客户端是pc还是手机及获取浏览器版本
//判断是pc还是移动端 function browserRedirect() { var sUserAgent = navigator.userAgent.toLowerCase(); var bI ...
- 使用Dockerfile制作JDK+tomcat镜像
1.准备好jdk和tomcatapache-tomcat-8.5.32.tar.gzjdk-8u181-linux-x64.tar.gz 注意:a.jdk和tomcat记得从官网下载,否则制作出来的镜 ...