├── _config.yml ├── .idea ├── .gitignore ├── vcs.xml ├── encodings.xml ├── modules.xml └── misc.xml ├── images ├── arch.png ├── bomb.png ├── camp.png ├── sky.png ├── tree.png ├── QQGroup.jpg ├── bucket.png ├── canyon.png ├── cloth.png ├── grass.png ├── grass2.png ├── redball.png ├── smalltree.png ├── waterfall.png ├── countrypath.jpg ├── curved-road.png ├── grand-canyon.png ├── log-crossing.png ├── lonelybeach.png ├── tree-twotrunks.png └── running-sprite-sheet.png ├── CanvasStudy.iml ├── Unit2 ├── Arc.html ├── PathSubpath.html ├── Shadow.html ├── ContextExtends.html ├── DottedLine.html ├── Rectangle.html ├── LineCap.html ├── Gradient.html ├── ColorAndOpaque.html ├── AntLine.html ├── ArcTo.html ├── QuadraticCurveTick.html ├── LineJoin.html ├── Eraser.html ├── Line.html ├── CutoutCircle.html ├── PathStrokeFill.html ├── Pattern.html ├── TextScaleRotate.html ├── PolygonSimple.html ├── GridBackground.html ├── QuadraticCurveTriangle.html ├── MoveRect.html ├── BezierCurve.html ├── PictureSynthesis.html ├── CutoutShape.html ├── Axis.html ├── AxisScale.html ├── AxisRotate.html ├── AxisTranslate.html ├── AxisMirro.html ├── DragCircle.html ├── DragLine.html ├── Dashboard.html ├── RadiusShape.html ├── PolygonDraw.html └── EditableBezierCurves.html ├── Unit1 ├── Listener │ ├── Mouse.html │ └── SpriteSheets.html ├── MathBase.html ├── CanvasAPI │ ├── ToBlob.html │ └── toDataURL │ │ ├── QualityTest.html │ │ └── ToDataUrl.html ├── CanvasSize.html ├── CanvasSizeNotCSS.html ├── saveAndRestore.html ├── Clock.html ├── ClockReturnImage2.html ├── ClockReturnImage.html ├── BouncingBalls.html └── RubberBands.html ├── LICENSE ├── Unit4 ├── DrawImage.html ├── CanvasDrawEachOther.html └── ScalingImage.html ├── Unit3 ├── MeasureText.html ├── TextFont.html ├── TextGradientsAndPatterns.html ├── TextAlignAndTextBaseline.html ├── TextStrokeFillShadow.html ├── CircleText.html └── AxisWithText.html └── README.md /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /workspace.xml -------------------------------------------------------------------------------- /images/arch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/arch.png -------------------------------------------------------------------------------- /images/bomb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/bomb.png -------------------------------------------------------------------------------- /images/camp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/camp.png -------------------------------------------------------------------------------- /images/sky.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/sky.png -------------------------------------------------------------------------------- /images/tree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/tree.png -------------------------------------------------------------------------------- /images/QQGroup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/QQGroup.jpg -------------------------------------------------------------------------------- /images/bucket.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/bucket.png -------------------------------------------------------------------------------- /images/canyon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/canyon.png -------------------------------------------------------------------------------- /images/cloth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/cloth.png -------------------------------------------------------------------------------- /images/grass.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/grass.png -------------------------------------------------------------------------------- /images/grass2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/grass2.png -------------------------------------------------------------------------------- /images/redball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/redball.png -------------------------------------------------------------------------------- /images/smalltree.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/smalltree.png -------------------------------------------------------------------------------- /images/waterfall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/waterfall.png -------------------------------------------------------------------------------- /images/countrypath.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/countrypath.jpg -------------------------------------------------------------------------------- /images/curved-road.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/curved-road.png -------------------------------------------------------------------------------- /images/grand-canyon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/grand-canyon.png -------------------------------------------------------------------------------- /images/log-crossing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/log-crossing.png -------------------------------------------------------------------------------- /images/lonelybeach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/lonelybeach.png -------------------------------------------------------------------------------- /images/tree-twotrunks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/tree-twotrunks.png -------------------------------------------------------------------------------- /images/running-sprite-sheet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/827652549/CanvasStudy/HEAD/images/running-sprite-sheet.png -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CanvasStudy.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Unit2/Arc.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | arc()作圆弧 6 | 7 | 8 | 9 | 10 | 11 | 19 | -------------------------------------------------------------------------------- /Unit1/Listener/Mouse.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 鼠标监听时间 6 | 7 | 8 | 9 | 10 | 23 | -------------------------------------------------------------------------------- /Unit2/PathSubpath.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 路径与子路径 6 | 7 | 8 | 9 | 10 | 24 | -------------------------------------------------------------------------------- /Unit2/Shadow.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 阴影 6 | 7 | 8 | 9 | 10 | 23 | -------------------------------------------------------------------------------- /Unit2/ContextExtends.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CanvasRenderingContext2D拓展 6 | 7 | 8 | 9 | 10 | 26 | -------------------------------------------------------------------------------- /Unit2/DottedLine.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 虚线的绘制 6 | 7 | 8 | 9 | 10 | 11 | 31 | -------------------------------------------------------------------------------- /Unit2/Rectangle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 矩形的绘制 6 | 7 | 8 | 9 | 10 | 27 | -------------------------------------------------------------------------------- /Unit2/LineCap.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 线段端点 6 | 7 | 8 | 9 | 10 | 35 | -------------------------------------------------------------------------------- /Unit2/Gradient.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 渐变色 6 | 7 | 8 | 9 | 10 | 26 | -------------------------------------------------------------------------------- /Unit2/ColorAndOpaque.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 颜色与不透明度 6 | 7 | 8 | 9 | 10 | 30 | -------------------------------------------------------------------------------- /Unit2/AntLine.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 蚂蚁线 6 | 7 | 8 | 9 | 10 | 43 | -------------------------------------------------------------------------------- /Unit2/ArcTo.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | arcTo()作圆弧 6 | 7 | 8 | 9 | 10 | 42 | -------------------------------------------------------------------------------- /Unit1/MathBase.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 7 | 8 | 9 | 10 | 45 | -------------------------------------------------------------------------------- /Unit2/QuadraticCurveTick.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 对勾,二次方贝塞尔曲线 6 | 7 | 8 |

这是用三条二次方贝塞尔曲线构成的复选框标记对号

9 | 10 | 11 | 12 | 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 苏一恒 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Unit2/LineJoin.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 线段连接点 6 | 7 | 8 | 9 | 10 | 45 | -------------------------------------------------------------------------------- /Unit1/CanvasAPI/ToBlob.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Canvas对象的toBlob方法示例 6 | 7 | 8 | 9 | 10 | 40 | -------------------------------------------------------------------------------- /Unit2/Eraser.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 橡皮擦的简单演示 6 | 7 | 8 | Canvas not support 9 | 41 | 42 | -------------------------------------------------------------------------------- /Unit4/DrawImage.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 图像的绘制 13 | 28 | 29 | 30 | canvas not supports 31 | 32 | 45 | 46 | -------------------------------------------------------------------------------- /Unit3/MeasureText.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 度量文本MeasureText 13 | 28 | 29 | 30 | canvas not supports 31 |

width展示的是在Canvas画布上的字符串'Hello'的宽度

32 | 33 | 46 | 47 | -------------------------------------------------------------------------------- /Unit2/Line.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 线段 6 | 7 | 8 | 9 | 10 | 11 | 12 | 48 | -------------------------------------------------------------------------------- /Unit1/CanvasSize.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 19 | 20 | 21 | 22 | 23 | 24 | Canvas不被支持 25 | 26 |

设置canvas的宽高的时候,不要通过CSS来设置width和height,因为CSS只能设置Canvas的元素本身大小,不能设置元素绘图表面(drawing surface)的大小 27 | 点击查看对比 28 |

29 | 30 | 47 | -------------------------------------------------------------------------------- /Unit1/CanvasSizeNotCSS.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 用CSS设置canvas大小会带来canvas.width的不正确 6 | 20 | 21 | 22 | 23 | 24 | 25 | Canvas不被支持 26 | 27 |

为什么会放大?

28 |

其实,当用属性设置宽高时,会同时设置canvas容器和绘图表面的大小,但是如果通过css设置宽高,只修改了canvas容器的大小,而绘图表面的大小并没有改变,导致浏览器会对绘图表面进行缩放,使其符合元素的大小。

29 | 30 | 47 | -------------------------------------------------------------------------------- /Unit1/CanvasAPI/toDataURL/QualityTest.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Testing canvas toDataURL (second) quality param 6 | 12 | 13 | 14 |

Canvas

15 | 16 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Unit4/CanvasDrawEachOther.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 将一个canvas绘制到另一个canvas上(通过离屏Canvas) 13 | 28 | 29 | 30 | canvas not supports 31 | 32 | 58 | 59 | -------------------------------------------------------------------------------- /Unit1/CanvasAPI/toDataURL/ToDataUrl.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Canvas对象的ToDataUrl方法示例 6 | 7 | 8 | 9 | 10 | 11 | 28 | -------------------------------------------------------------------------------- /Unit4/ScalingImage.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 图像的绘制 13 | 28 | 29 | 30 |
31 | 32 | 缩放图片 33 |
34 | canvas not supports 35 | 36 | 64 | 65 | -------------------------------------------------------------------------------- /Unit1/saveAndRestore.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | save方法和restore方法的使用 6 | 7 | 8 | 9 | 10 | 85 | -------------------------------------------------------------------------------- /Unit2/CutoutCircle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 剪纸效果、镂空效果 6 | 7 | 8 | 9 | 10 | 11 | 75 | -------------------------------------------------------------------------------- /Unit2/PathStrokeFill.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 路径、描边和填充 6 | 7 | 8 | 9 | 10 | 11 | 92 | -------------------------------------------------------------------------------- /Unit2/Pattern.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 图案 6 | 16 | 17 | 18 |

点击不同的按钮查看不同的重复演示

19 |
20 | repeat 21 | repeatX 22 | repeatY 23 | noRepeat 24 |
25 | 26 | 27 | 71 | -------------------------------------------------------------------------------- /Unit2/TextScaleRotate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文本缩放并旋转 6 | 15 | 16 | 17 | 18 | 19 | Canvas not supported 20 | 21 | 22 | 97 | -------------------------------------------------------------------------------- /Unit2/PolygonSimple.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 简单的多边形 6 | 7 | 8 | 9 | 10 |

试试选择不同的边数

11 | 12 | 21 | 22 | 95 | 96 | -------------------------------------------------------------------------------- /Unit2/GridBackground.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 网格背景 6 | 30 | 31 | 32 |

欢迎来到CanvasStudy

33 |
34 |

第一节

35 |

欢迎来到我的Canvas教程,在这里你可以学到关于Canvas更加详细的应用,充分了解Canvas的特性,希望得到您的支持。

36 |

我的处女作《Canvas系列教程》在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作。 37 | 教程介绍、教程目录等能在README里查阅。 38 | 传送门:https://github.com/827652549/CanvasStudy 39 |

40 |

第二节

41 |

欢迎来到我的Canvas教程,在这里你可以学到关于Canvas更加详细的应用,充分了解Canvas的特性,希望得到您的支持。

42 |

我的处女作《Canvas系列教程》在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作。 43 | 教程介绍、教程目录等能在README里查阅。 44 | 传送门:https://github.com/827652549/CanvasStudy 45 |

46 | canvas not supported 47 | 48 | 100 | -------------------------------------------------------------------------------- /Unit2/QuadraticCurveTriangle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 圆角三角形,二次方贝塞尔曲线 6 | 7 | 8 | 9 | 10 | 94 | -------------------------------------------------------------------------------- /Unit2/MoveRect.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 拖拽小方块 6 | 7 | 13 | 14 | 15 | Canvas not supported 16 |

拖拽方块并实时重绘

17 | 18 | 109 | -------------------------------------------------------------------------------- /Unit2/BezierCurve.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 三次方贝塞尔曲线 6 | 7 | 8 | 9 | 10 | 113 | -------------------------------------------------------------------------------- /Unit2/PictureSynthesis.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 图像合成 6 | 20 | 21 | 22 | 35 | Canvas not supports 36 | 37 | 102 | -------------------------------------------------------------------------------- /Unit3/TextFont.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 文字的font属性 13 | 28 | 29 | 30 | canvas not supports 31 | 32 | 122 | 123 | -------------------------------------------------------------------------------- /Unit3/TextGradientsAndPatterns.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 渐变色文本和图案文本 6 | 7 | 26 | 27 | 28 | 29 | 30 | Canvas not supported 31 | 32 | 33 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /Unit1/Clock.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Canvas时钟 6 | 7 | 8 | Canvas不支持。 9 | 10 | 119 | -------------------------------------------------------------------------------- /Unit3/TextAlignAndTextBaseline.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 文字定位 13 | 28 | 29 | 30 | canvas not supports 31 | 32 | 122 | 123 | -------------------------------------------------------------------------------- /Unit2/CutoutShape.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 绘制其他剪纸图形 6 | 7 | 8 | 9 | 10 | 133 | -------------------------------------------------------------------------------- /Unit3/TextStrokeFillShadow.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 文字的描边、填充、阴影 6 | 24 | 25 | 26 | 27 |
28 | Stroke 29 | Fill 30 | Shadow 31 |
32 | 33 | 34 | Canvas not supported 35 | 36 | 37 | 138 | 139 | -------------------------------------------------------------------------------- /Unit1/Listener/SpriteSheets.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 精灵表坐标查看器Sprite Sheets 6 | 25 | 26 | 27 | 28 |
29 |

加载一个图片,移动鼠标,获取基于canvas鼠标处精灵表坐标

30 | Canvas not supported 31 | 32 | 148 | -------------------------------------------------------------------------------- /Unit2/Axis.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 坐标轴的绘制 6 | 7 | 8 | 9 | 10 | 158 | -------------------------------------------------------------------------------- /Unit2/AxisScale.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 坐标轴的缩放 6 | 7 | 8 | 9 | 10 | 162 | -------------------------------------------------------------------------------- /Unit2/AxisRotate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 坐标轴的旋转 6 | 7 | 8 | 9 | 10 | 162 | -------------------------------------------------------------------------------- /Unit2/AxisTranslate.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 坐标轴的平移 6 | 7 | 8 | 9 | 10 | 162 | -------------------------------------------------------------------------------- /Unit2/AxisMirro.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 坐标轴的镜像 6 | 7 | 8 | 9 | 10 | 165 | -------------------------------------------------------------------------------- /Unit1/ClockReturnImage2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Canvas时钟+转化img标签+不用按钮操作' 6 | 22 | 23 | 24 |

直接右键可以导出img变化的canvas

25 | 26 | 27 | 28 | 29 | 30 | Canvas not supported 31 | 32 | 33 | 164 | -------------------------------------------------------------------------------- /Unit1/ClockReturnImage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Canvas时钟+转化img标签' 6 | 7 | 8 |
9 | 10 |

点击按钮,canvas和img的相互转化,通过右键查看不同效果

11 |
12 | 13 | 14 | Canvas不支持。 15 | 16 | 150 | -------------------------------------------------------------------------------- /Unit1/BouncingBalls.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Bouncing Balls运动小球 6 | 7 | 8 | 9 | 63 | 64 | 65 | 66 | 67 |
68 |

弹射小球

69 | 70 |

一百个小球弹射

71 | 72 | Start 73 |
74 | 75 | 76 | Canvas not supported 77 | 78 | 79 | 184 | 185 | 186 | -------------------------------------------------------------------------------- /Unit1/RubberBands.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 橡皮筋选框放大器 6 | 33 | 34 | 35 | 36 |
37 | 38 |
39 | 40 |
41 | Canvas not supported 42 |

拖拽鼠标拉取橡皮筋,选中区域并放大

43 | 44 | 203 | -------------------------------------------------------------------------------- /Unit3/CircleText.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 环形文字(1024节日快乐) 13 | 29 | 30 | 31 | canvas not supports 32 | 33 | 181 | 182 | -------------------------------------------------------------------------------- /Unit3/AxisWithText.html: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 带数字标签的坐标轴的绘制 13 | 14 | 15 | 16 | 17 | 208 | -------------------------------------------------------------------------------- /Unit2/DragCircle.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 拖拽画圆 6 | 7 | 32 | 33 | 34 | 35 | 36 |
37 | 38 | Color: 45 | Guidewires(坐标辅助线): 46 | 47 | 填充实心 48 | 49 | 50 |
51 |

画圆:设置笔触颜色,是否添加辅助线,是否填充内部空间,然后再画布上绘画。如有需要,使用"清除画布"按钮

52 | 53 | 282 | -------------------------------------------------------------------------------- /Unit2/DragLine.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 拖拽画直线 6 | 7 | 32 | 33 | 34 | 35 | 36 |
37 | 38 | Stroke Color: 45 | Guidewires(坐标辅助线): 46 | 47 | 矩形选框 48 | 49 | 50 |
51 |

设置笔触颜色,是否添加辅助线,是否使用矩形选框,然后再画布上绘画。如有需要,使用"清除画布"按钮

52 | 53 | 283 | 284 | -------------------------------------------------------------------------------- /Unit2/Dashboard.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 仪表盘 6 | 21 | 22 | 23 | canvas不支持 24 |

带刻度的仪表盘

25 | 26 | 277 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CanvasStudy 2 | 3 | 4 | ## 关于Canvas(About Canvas) 5 | 6 |    Canvas API 提供了一个通过JavaScript和HTML的<canvas>元素来绘制图形的方式。它可以用于动画、游戏画面、数据可视化、图片编辑以及实时视频处理等方面。 7 | 8 |   Canvas API主要聚焦于2D图形。而同样使用<canvas>元素的 WebGL API 则用于绘制硬件加速的2D和3D图形。 9 | 10 |   Canvas可操作的层面是像素级别的,你觉得还有什么它做不到吗? 11 | 12 | ## 介绍(Introduce) 13 |   本教程是一套详细介绍Canvas的系列学习教程同时也是查阅工具,以实例为主,采用由泛到精的学习结构,所有的小节都有单独的教程页面和HTML文件。 14 | 15 | **如果你想直接开始学习,请直接下拉到[目录区](#contents)。** 16 | 17 | **注意:该教程并未完结,以下是正式版的README说明。** 18 | 19 | 现在,所有教程的讲解均在CSDN博客里书写,以Github Pages在线演示(你可能需要翻墙)。 20 | 21 | 未来,会将所有的教程搬运到一个专门的网站供访问和探讨。 22 | ## 适用人群(For people) 23 | - 如果你是想**系统性地学习Canvas**,那么该教程适合你,它拥有全套的Canvas细节介绍。 24 | - 如果你想要**进一步Canvas某一个特性**,那么此教程适合你,它涵盖了Canvas所有的特性。 25 | - 如果你在**开发Canvas中遇到了某个bug**,那么此教程适合你,它针对于每个特性都有相应的在线示例。 26 | 27 | ## 预备知识(Knowledge) 28 |   你最好能熟练运用HTML、JavaScript与CSS技术,举例来说,假设你已经知道如何使用JavaScript语言的原型继承实现一个对象。 29 | 30 |   另外也需要你具备一些基本的数学知识,注如基本的代数运算、三角函数、向量数学以及计量单位的换算。在第一章的末尾,你能找到涵盖上述基础数学知识的讲解。 31 | 32 |   当然,如果你保持一颗积极向上的心,你也可以边学习Canvas边补充你的预备知识技能。因为,这并不难,不是吗? 33 | 34 | ## 创作背景(Creative Background) 35 |   在浏览了国内主要的Canvas系列讲解后,发现对于Canvas的教程是不健全的,除此之外,那些更适合作为一个查阅工具,而不是适合系统学习。为了让更多的人学习和使用Canvas,我决定出一篇Canvas教程当作自己的处女座,写作的过程中会有不成熟的地方,希望能得到大家的指正和批评。 36 | 37 |   我以《HTML5 Canvas核心技术(图形、动画与游戏开发)》机械工业出版社 为Canvas系列教程的核心参考资料,另外在某些书中没有说明白的,再引用其他平台如MDN来补充和总结。 38 | 39 |   在这里感谢David Geary创作这本书,感谢爱飞翔翻译。 40 | 41 |   为了让所有人都能理解,我尽量精简我的语言和措辞,在阅读完第一章之后,我发现其实这本书还是有很多可以精简和“通俗化”的语句的,于是我就直接总结到我的教程之中。 42 | 43 |   目前本仓库仍在更新中,相应的Demo演示直接打开对应html文件即可。 44 | 45 |   每个文件都在我都CSDN博客专栏中对应都有教程文章 46 | [Canvas系列教程 47 | ](https://blog.csdn.net/huoyihengyuan/article/category/9294371)。 48 | 49 |   在之后都更新中,会将所有的演示Demo的在线链接和说明都贴到README中方便大家使用。 50 | 51 | ## 教程目录(Contents) 52 | - 如果你打算系统性学习Canvas,推荐您按照顺序学习,在一定程度上能够节省您的时间。 53 | - 如果你是要了解某个特性或定位BUG,直接找到对应教程,进入链接查看详细说明和示例。 54 | 55 | ### 第一章·基础知识 56 | 57 | 1. [两套width和height](https://blog.csdn.net/HuoYiHengYuan/article/details/98768351) 58 | 2. [canvas转图片](https://blog.csdn.net/HuoYiHengYuan/article/details/99671708) 59 | 3. [toBlob()转Blob](https://blog.csdn.net/HuoYiHengYuan/article/details/99674215) 60 | 4. [绘图环境](https://blog.csdn.net/HuoYiHengYuan/article/details/99690179) 61 | 5. [状态的保存和恢复](https://blog.csdn.net/HuoYiHengYuan/article/details/99710761) 62 | 6. [支持IE6、IE7、IE8](https://blog.csdn.net/HuoYiHengYuan/article/details/99710962) 63 | 7. [【项目】Canvas时钟](https://blog.csdn.net/HuoYiHengYuan/article/details/99713943) 64 | 8. [鼠标事件](https://blog.csdn.net/HuoYiHengYuan/article/details/99819255) 65 | 9. [canvas.width和context.canvas.width](https://blog.csdn.net/HuoYiHengYuan/article/details/99836728) 66 | 10. [【项目】精灵表坐标查看器](https://blog.csdn.net/HuoYiHengYuan/article/details/99855314) 67 | 11. [键盘事件](https://blog.csdn.net/HuoYiHengYuan/article/details/99864431) 68 | 12. [绘制表面的保存与恢复](https://blog.csdn.net/HuoYiHengYuan/article/details/99887366) 69 | 13. [【项目】100个弹射小球](https://blog.csdn.net/HuoYiHengYuan/article/details/100005577) 70 | 14. [【项目】橡皮筋选框局部放大器](https://blog.csdn.net/HuoYiHengYuan/article/details/100012229) 71 | 15. [打印Canvas的内容](https://blog.csdn.net/HuoYiHengYuan/article/details/100017900) 72 | 16. [数学知识:代数方程、三角函数、向量运算](https://blog.csdn.net/HuoYiHengYuan/article/details/100045570) 73 | 17. [第一章-章末小结](https://blog.csdn.net/HuoYiHengYuan/article/details/100048001) 74 | 75 | ### 第二章·绘制 76 | 77 | 1. [Canvas绘制模型:canvas的浏览器渲染过程原理](https://blog.csdn.net/HuoYiHengYuan/article/details/100051229) 78 | 2. [矩形的绘制](https://blog.csdn.net/HuoYiHengYuan/article/details/100060912) 79 | 3. [颜色与透明度](https://blog.csdn.net/HuoYiHengYuan/article/details/100080538) 80 | 4. [渐变色和图案](https://blog.csdn.net/HuoYiHengYuan/article/details/100083546) 81 | 5. [阴影](https://blog.csdn.net/HuoYiHengYuan/article/details/100093188) 82 | 6. [路径(path)、描边(stroke)与填充(fill)详细介绍](https://blog.csdn.net/HuoYiHengYuan/article/details/100097238) 83 | 7. [剪纸效果/镂空效果](https://blog.csdn.net/HuoYiHengYuan/article/details/100127744) 84 | 8. [线段、网格、像素边界](https://blog.csdn.net/HuoYiHengYuan/article/details/100133611) 85 | 9. [坐标轴的绘制(带刻度线)](https://blog.csdn.net/HuoYiHengYuan/article/details/100152080) 86 | 10. [【项目】画板——直线和矩形选区的实现](https://blog.csdn.net/HuoYiHengYuan/article/details/100179518) 87 | 11. [虚线和蚂蚁线](https://blog.csdn.net/HuoYiHengYuan/article/details/100188987) 88 | 12. [CanvasRenderingContext2D扩展新方法和新属性](https://blog.csdn.net/HuoYiHengYuan/article/details/100190323) 89 | 13. [线段端点和连接点](https://blog.csdn.net/HuoYiHengYuan/article/details/100377904) 90 | 14. [圆和圆弧](https://blog.csdn.net/HuoYiHengYuan/article/details/100516741) 91 | 15. [【项目】画板——圆的实现](https://blog.csdn.net/HuoYiHengYuan/article/details/100529003) 92 | 16. [【项目】数字刻度仪表盘](https://blog.csdn.net/HuoYiHengYuan/article/details/100547808) 93 | 17. [【项目】网格线背景(可作为HTML模版来用)](https://blog.csdn.net/HuoYiHengYuan/article/details/100556626) 94 | 18. [二次方贝塞尔曲线(复选框对勾和圆角三角形)](https://blog.csdn.net/HuoYiHengYuan/article/details/100679648) 95 | 19. [三次方贝塞尔曲线](https://blog.csdn.net/HuoYiHengYuan/article/details/100713817) 96 | 20. [多边形(三角形、矩形、五边形、六边形……)](https://blog.csdn.net/HuoYiHengYuan/article/details/100748594) 97 | 21. [【项目】画板——多边形的实现](https://blog.csdn.net/HuoYiHengYuan/article/details/100788013) 98 | 22. [isPointInPath()判断在路径内。(实现拖拽小方块)](https://blog.csdn.net/HuoYiHengYuan/article/details/100836422) 99 | 23. [【项目】画板——可编辑贝塞尔曲线](https://blog.csdn.net/HuoYiHengYuan/article/details/100862959) 100 | 24. [坐标轴的平移(translate)、缩放(scale)、旋转(totate)、镜像](https://blog.csdn.net/HuoYiHengYuan/article/details/100907020) 101 | 25. [【项目】画板——交互式旋转多边形](https://blog.csdn.net/HuoYiHengYuan/article/details/100972961) 102 | 26. [自定义坐标变换,transform()和setTransform()](https://blog.csdn.net/HuoYiHengYuan/article/details/101023950) 103 | 27. [图像合成,globalCompositeOperation属性](https://blog.csdn.net/HuoYiHengYuan/article/details/101056448) 104 | 28. [【项目】鼠标控制文字旋转缩放](https://blog.csdn.net/HuoYiHengYuan/article/details/101397222) 105 | 29. [剪辑区域,使用clip()实现橡皮擦](https://blog.csdn.net/HuoYiHengYuan/article/details/101467804) 106 | 30. [【项目】画板——橡皮擦工具](https://blog.csdn.net/HuoYiHengYuan/article/details/101478536) 107 | 31. [任意圆角多边形](https://blog.csdn.net/HuoYiHengYuan/article/details/105701602) 108 | 32. [第二章-章末小结](https://blog.csdn.net/HuoYiHengYuan/article/details/101480019) 109 | 110 | ### 第三章·文本 111 | 112 | 1. [文本描边(strokeText)、填充(fillText)、阴影效果](https://blog.csdn.net/HuoYiHengYuan/article/details/101599016) 113 | 2. [渐变文本、图案文本](https://blog.csdn.net/HuoYiHengYuan/article/details/101652385) 114 | 3. [font及相关属性(font-style、font-variant、font-weight、font-size、line-height、font-family)](https://blog.csdn.net/HuoYiHengYuan/article/details/101677114) 115 | 4. [font的水平对齐textAlign和垂直对齐textBaseline](https://blog.csdn.net/HuoYiHengYuan/article/details/102459134) 116 | 5. [文本宽度的度量measureText()](https://blog.csdn.net/HuoYiHengYuan/article/details/102498121) 117 | 6. [【项目】给坐标轴添加数字标签](https://blog.csdn.net/HuoYiHengYuan/article/details/102695375) 118 | 7. [【项目】环形文字](https://blog.csdn.net/HuoYiHengYuan/article/details/102721153) 119 | 8. [第三章-章末小结](https://blog.csdn.net/HuoYiHengYuan/article/details/102756052) 120 | 121 | ### 第四章·图像与视频 122 | 123 | 1. [将图像和视频帧绘制到canvas中](https://blog.csdn.net/HuoYiHengYuan/article/details/102779152) 124 | 2. [图片缩放到canvas大小](https://blog.csdn.net/HuoYiHengYuan/article/details/102797954) 125 | 126 | ## 另外(Additional) 127 | 128 |   在教程之中,我省略了一部分方法的参数介绍,因为你能很容易在网上找到更权威的参数说明,便不再过多解释。 129 | 130 |   **更新顺序会按照章节顺序更新,更新仍在继续,请保持关注和支持**。 131 | 132 | ## 联系(Contact) 133 |   **欢迎联系我提建议。** 134 | - 作者:苏一恒 135 | - Email:827652549@qq.com 136 | - QQ:827652549 137 | - QQ群:865327862,在这里我们共同探讨关于Canvas的有趣技术、感谢支持。 138 |
139 | 140 | ## 欢迎修订(Join me) 141 |   如果您对代码中的细节有更合适的修改,欢迎和我一起完善这套教程。 142 | 143 |   感谢所有人关注和支持的人,欢迎手动点star。 144 | ## 本教程的完善计划(Doing) 145 |   因为该教程是本人的处女作,所以会有很多不完善的地方,希望大家体谅。我虽然能在写作中完善,但是在不断地学习“如果写一篇好教程”的过程中,不能总是折返修改之前的文章,这样会带来太多的时间成本的浪费。 146 | 147 |   我希望在能尽量减少浪费时间成本的情况下,一步步将本教程完善起来。 148 | 149 |   于是我决定分阶段不断地完善该教程。 150 | 151 | - [ ] 第一阶段:**创作文章的内容**。以CSDN博客为文章载体,以Github Pages为在线演示载体,通过链接跳转,达到教程“容易理解”的目的。 152 | - [ ] 第二阶段:**统一每篇教程的格式,修正所有的链接**。例如在前面某些章节中,关于代码的说明有的是直接引入的代码块,有的是链接到Github中;目录有的有,有的没有…… 153 | - [ ] 第三阶段:**将教程移植到个人网站,专门服务该教程**。太依托CSDN对于教程的推广,移植到个人网站后,便能够统一化管理,建立各级目录和锚点,在线演示等等都变得方便起来。总的来说,就是让读者更容易学习Canvas这门技术。 154 | - [ ] 第四阶段:**精炼教程,推敲文字,使之更易学习和专业**。在创作初期,受我本人的语言表达能力影响,有些措辞可以更加精确,这就需要下点功夫去修改那些措辞,以追求高质量教程。 155 | - [ ] 第五阶段:**紧跟Canvas标准,添加新特性相关教程**。这个时代,HTML5的标准是Living Standard,来自[WAHTWG](https://html.spec.whatwg.org/multipage/canvas.html),所以要不断地紧跟潮流,推陈出新,以更加完备的姿态去面临未来的挑战。 156 | -------------------------------------------------------------------------------- /Unit2/RadiusShape.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 自定义圆角 6 | 11 | 12 | 13 |
已知数组 [{ x, y, radius }, ...], 在canvas中绘制出对应图形
14 | 15 | 16 | 346 | 347 | -------------------------------------------------------------------------------- /Unit2/PolygonDraw.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 多边形画板,绘制多边形 5 | 6 | 7 | 28 | 29 | 30 | 31 | 32 | Canvas not supported 33 | 34 | 35 |
36 | 46 | 47 | 57 | 58 | 67 | 68 | 75 | 76 | 77 | 78 |
79 | 80 | 300 | -------------------------------------------------------------------------------- /Unit2/EditableBezierCurves.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 可编辑的贝塞尔曲线 6 | 49 | 50 | 51 | Canvas not supported 52 |
53 | Stroke color: 63 | Guidewires: 64 | 65 |
66 |
67 |

拖动贝塞尔曲线的锚点和控制点以改变曲线的形状

68 | 69 |

当你完成曲线形状的编辑后,点击曲线外的一点,以完成此图像

70 | 71 | 72 | 74 |
75 | 76 | 438 | --------------------------------------------------------------------------------