## 基础内容 ### 1. 什么是 SVG SVG 全称为 Scalable Vector Graphics,译为可缩放矢量图形,简称矢量图。是一种用来描述二维矢量图形的 XML 标记语言。 ### 2. SVG与Flash的区别 | | SVG | Flash | | --- | --- | --- | | 相同点 | 用于二维矢量图形 | 用于二维矢量图形 | | 不同点 | 是一个开放的W3C标准,基于XML | 封闭的基于二进制格式的 | ### 3. SVG与Canvas的区别 | SVG | Canvas | | --- | --- | | 不依赖于分辨率 | 依赖于分辨率 | | 使用DOM及事件处理器(DOM专门为SVG开放接口)|不能使用DOM及事件处理器| | 不能实现游戏开发 | 可以实现游戏开发 | | 实现大型渲染区域的应用(例如百度地图) | 是以图片(png|jpg)存在 | ### 4. SVG的优势 - 不需要专门的编辑器,文本编辑器都可以 - 可被搜索、索引、脚本化及压缩 - 图像不失真(和分辨率无关) **值得注意的是:** - SVG技术并不是专属于HTML5的 - SVG技术本身是一套独立的用于描述二维图形 - HTML5版本之前,以图片形式进行引入 - HTML5版本之后,允许在HTML页面直接使用SVG技术 **可参考的资源:** - SVG 标准:[http://www.w3.org/Graphics/SVG/](http://www.w3.org/Graphics/SVG/) - SVG 教程:[https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial](https://developer.mozilla.org/zh-CN/docs/Web/SVG/Tutorial) ### 5. 如何使用 SVG #### 1)SVG 文件(了解) SVG 文件的扩展名为 “.svg”,使用的是 XML 技术的语法内容,并且可以在浏览器中直接运行。 ```xml ``` 也可以在 HTML 页面引入 SVG 文件。 ```html ``` #### 2)HTML 直接定义 SVG HTML5 的新特性允许在 HTML 页面中直接定义 SVG 元素(需要学习有关SVG的一些HTML新元素)。 **``元素:** | | ``元素 | | --- | --- | | 作用 | 类似于canvas元素 | | 特点 | 默认的宽度和高度分别为300px和150px,不具有任何的样式(默认情况下不显示) | | 目的 | 表示当前使用SVG语法内容 | **``元素的属性:** | 属性名称 | 描述 | | --- | --- | | width | 设置 `` 元素的宽度 | | height | 设置 `` 元素的高度 | | style | 设置 `` 元素的样式 | ```html ``` ## 图像元素 ### 1. 样式 | 属性名称 | 描述 | | --- | --- | | fill | 设置填充样式 | | stroke | 设置描边样式 | | stroke-width | 设置描边宽度 | ### 2. 矩形 ```html ``` | 属性名称 | 描述 | | --- | --- | | x和y | 表示绘制矩形的左上角坐标值 | | width | 表示绘制矩形的宽度 | | height | 表示绘制矩形的高度 | | rx和ry | 表示绘制矩形的四个角的水平圆角和垂直圆角(如果rx和ry的值分别为width/2和height/2,绘制圆形)| > **值得注意的是:** > > - 默认绘制出来的效果:实心矩形效果。 > - 可以实现"空心"的效果:不能实现空心效果。 ```html ``` ### 3. 圆形 ```html ``` | 属性名称 | 描述 | | --- | --- | | cx和cy | 表示绘制圆形的圆心坐标值 | | r | 表示绘制圆形的半径 | ```html ``` ### 4. 椭圆 ```html ``` | 属性名称 | 描述 | | --- | --- | | cx和cy | 表示绘制椭圆的圆心坐标值 | | rx | 表示绘制椭圆的水平方向半径 | | ry | 表示绘制椭圆的垂直方向半径 | ```html ``` ### 5. 线条 ```html ``` | 属性名称 | 描述 | | --- | --- | | x1和y1 | 表示绘制直线的起点坐标值 | | x2和y2 | 表示绘制直线的终点坐标值 | | stroke | 设置绘制直线的样式(颜色) | | stroke-width | 设置绘制直线的宽度 | ```html ``` ### 6. 折线 ```html ``` | 属性名称 | 描述 | | --- | --- | | points | 表示绘制折线的起点、折点及终点坐标值(格式:x1,y1 x2,y2 x3,y3 xn,yn) | | stroke | 设置折线的颜色 | | stroke-width | 设置折线的线宽 | | fill | 设置与``元素的背景色相同 | ```html ``` ### 7. 多边形 ```html ``` | 属性名称 | 描述 | | --- | --- | | points | 表示绘制多边形的所有点坐标值 | ```html ``` > **值得注意的是:** > > - 一个HTML页面允许包含多个``元素 > - 一个``元素允许包含多个图形元素 > - SVG的图形元素基本都是起始元素 > - 定义图形元素时,只定义开始元素,没有结束元素 > - 浏览器在运行页面时,并不报错 > - 浏览器解析这段元素代码时,自动补全结束元素 > - 自动补全的结束元素是不正确的 ### 8. 渐变 #### 1)线性渐变 ```html ``` | 属性名称 | 描述 | | --- | --- | | id | 标识,便于其他元素进行引用 | | x1和y1 | 表示基准线的起点坐标值(值范围为 0-1, 是百分值 0%-100%) | | x2和y2 | 表示基准线的终点坐标值(值范围为 0-1, 是百分值 0%-100%) | ```html ``` | 属性名称 | 描述 | | --- | --- | | offset | 表示设置渐变颜色的位置 | | stop-color | 表示设置的渐变颜色 | | stop-opacity | 表示设置渐变颜色的透明度 | ```html ``` #### 2)射线渐变 ```html ``` | 属性名称 | 描述 | | --- | --- | | id | 标识,便于其他元素进行引用 | | cx和cy | 表示基准线中的中心点坐标值(值范围为 0-1, 是百分值 0%-100%) | | fx和fy | 表示基准线中的焦点坐标值(值范围为 0-1, 是百分值 0%-100%) | | r | 设置其边缘位置(值范围为 0-1, 是百分值 0%-100%) | ```html ``` | 属性名称 | 描述 | | --- | --- | | offset | 表示设置渐变颜色的位置 | | stop-color | 表示设置的渐变颜色 | | stop-opacity | 表示设置渐变颜色的透明度 | ```html ``` > **值得注意的是:** > > - 渐变元素需要定义id属性,便于其他元素进行引用 > - 渐变元素定义在元素内 > - 元素内定义:表示该元素允许重复使用 ### 9. 滤镜 ```html ``` **值得注意的是:**该元素只是滤镜的容器。 #### 高斯模糊 ```html ``` | 属性名称 | 描述 | | --- | --- | | in | 设置高斯模糊的样式 | | stdDeviation | 设置模糊的程度 | ```html ``` ## Two.js库 ### 1. 基础内容 Two.js支持不同的上下文环境: - SVG(默认) - Canvas - WebGL 官网地址:[http://jonobr1.github.io/two.js/](http://jonobr1.github.io/two.js/) #### 如何使用 Two.js ##### 1)HTML 页面 * 引入Two.js库文件 * 定义容器元素 `
` ```html 如何使用Two.js库
``` ##### 2)JavaScript逻辑 * 获取HTML页面的容器元素 * 通过 Two.js 库提供的 Two() 构造函数创建 Two 对象 ```javascript var params = {// 创建svg时初始化的数据 width : 宽度, height : 高度 } var two = new Two(params); ``` * 将创建的 Two 对象添加到 HTML 页面容器元素内 ```javascript two.appendTo(elem); ``` * 使用 Two.js 库提供的 API 方法绘制图形 * 调用 update() 方法进行绘制 ```html 如何使用Two.js库
``` ### 2. 绘制图像 #### 1)绘制图像的方法 | 图像形状 | 方法 | | --- | --- | | 圆形 | `makeCircle(x, y, radius)` | | 直线 | `makeLine(x1, y1, x2, y2)` | | 矩形 | `makeRectangle(x, y, width, height)` | | 圆角矩形 | `makeRoundedRectangle(x, y, width, height, radius)` | | 椭圆 | `makeEllipse(x, y, width, height)` | | 多边形 | `makePolygon(ox, oy, r, sides)` | | 路径 | `makePath(x1, y1, x2, y2, xN, yN, open)` | | 星形 | `makeStar(ox, oy, or, ir, sides)` | #### 2)绘制图像的属性 | 属性名称 | 描述 | | --- | --- | | fill | 设置填充样式 | | stroke | 设置描边样式 | | linewidth | 设置线条宽度 | | opacity | 设置透明度 | | cap | 设置线条端点形状,默认为`round` | | join | 设置线条交点形状,默认为`round` | ```html 如何使用Two.js库
``` ### 3. 图像分组 调用 Two 对象的 makeGroup() 方法对图像进行分组操作。 - makeGroup() 方法任意图形对象作为参数 - makeGroup() 方法返回分组对象 > **值得注意的是:**在统一对一组图像设置后,针对不同图像进行个性化设置。 ```html Two.js库进行图形分组
``` ### 4. 动画效果(了解) | 方法名称 | 描述 | | --- | --- | | play() | 提供一组循环动画 | | pause() | 提供中止动画效果 | | update() | 提供更新当前绘制或设置 | ```html Two.js库实现动画效果
```