画个矢量图——HTML5-SVG
可缩放矢量图形(英语:Scalable Vector Graphics,SVG)是一种基于可扩展标记语言(XML),用于描述二维矢量图形的图形格式。SVG 由 W3C 制定,是一个开放标准。
应用场景
图表
图标 icon
动效
矢量图
SVG 的优势
由于 SVG 图像是矢量图像,可以无线缩放,而且在图像质量下降方面没有任何问题。因为 SVG 图像是使用 XML 标记 构建的,浏览器通过每个点和线来打印他们,而不是用预定义的像素填充某些空间。这确保 SVG 图像可以适应不同的屏幕大小和分辨率。
由于是在 XML 中定义的,SVG 图像比 JPG 或 PNG 图像更灵活,而且我们可以使用 Css 和 JavaScript 进行交互。
开始
<!-- 定义绘图区域 -->
<svg width="500px" height="500px"></svg>代码示例
<svg width="500px" height="500px">
<!-- 直线 -->
<!-- x1, y1 x2, y2 定义两点坐标 -->
<line x1="100" y1="100" x2="200" y2="100"></line>
<!-- 矩形 -->
<!-- x , y 是起始坐标,width 和 height 是自解释的。rx, ry是定义圆角 -->
<rect x="50" y="50" width="100" height="100" rx="10" ry="20"></rect>
<!-- 圆形 -->
<!-- 半径 圆心 -->
<circle r="50" cx="220" cy="100"></circle>
<!-- 椭圆形 -->
<!-- x轴,y轴 圆心 -->
<ellipse rx="100" ry="50" cx="100" cy="200"></ellipse>
<!-- 折线 -->
<!-- 使用 points 定义多个点 各组点使用逗号分开 -->
<polyline
points="60 50, 75 35, 100 50, 125 35, 150 50, 175 35, 190 50"
></polyline>
<!-- 多边形 -->
<!-- 通过定义多个点 进行连线 -->
<polygon points="125 125, 130 140, 120 140"></polygon>
<!-- 文本 -->
<text x="125" y="220">Hello Lambda</text>
</svg>
/* 使用 css 定义svg样式 */
svg {
/* 线条颜色 */
stroke: #000;
/* 线条粗细 */
stroke-width: 5;
/* 线条样式 */
stroke-linecap: round;
stroke-linejoin: round;
/* 填充 */
fill: #f40;
/* 线条透明度 */
stroke-opacity: 0.8;
/* 填充透明度 */
fill-opacity: 0.6;
}
path 元素
绝对坐标和相对坐标
代码示例





线性渐变

径向渐变

高斯模糊滤镜

更多滤镜效果可以访问 http://www.w3school.com.cn/svg/svg_filters_intro.asp
SVG 路径动画
通过控制 SVG 的样式来实现动画
通过修改 stroke-dashoffset 的值让路路径慢慢地展现出来
代码示例

可以通过
getTotalLength()函数获取到 path 路径总长度可以通过
getPointAtLength(X)函数获取路径上距离起始点距离 x 长度的点的坐标
JS 生成 SVG 元素
创建 SVG 元素需要指定命名空间
SVG 元素对象一般通过调用 setAttribute() 方法来设定属性值

canvas 和 svg 区别
从图像类别区分,Canvas 是基于像素的位图,而 SVG 却是基于矢量图形。可以简单的把两者的区别看成 photoshop 与 illustrator 的区别。
从结构上说,Canvas 没有图层的概念,所有的修改整个画布都要重新渲染,而 SVG 则可以对单独的标签进行修改。
从操作对象上说,Canvas 是基于 HTML canvas 标签,通过宿主提供的 Javascript API 对整个画布进行操作的,而 SVG 则是基于 XML 元素的。
从功能上讲,SVG 发布日期较早,所以功能相对 Canvas 比较完善。
关于动画,Canvas 更适合做基于位图的动画,而 SVG 则适合图表的展示。
从搜索引擎角度分析,由于 svg 是有大量标签组成,所以可以通过给标签添加属性,便于爬虫搜索
最后更新于