资讯专栏INFORMATION COLUMN

SVG的粗谈

el09xccxy / 3153人阅读

摘要:和确定的版本指定的宽高指定命名空间。的曲线就是使用画的。等等元素元素是用来组合对象的容器。添加到元素的属性会被其所有的子元素继承。是基于矢量的,可以很好的处理图像大小变化。而是基于位图的,无法进行大小变化。

背景

最近一直在做报表之类的需求,用highcharts比较多。highcharts使用svg进行绘图,所以学习了一下svg,稍微记录一下。

概况

svg是XML语言的一种形式。SVG可以通过定义必要的线和形状来创建一个图形,也可以修改已有的位图,或者将这两种方式结合起来创建图形。图形和其组成部分可以变形,可以合成,还可以通过滤镜完全改变外观。可能不太准确的简单来说,"就是可以绘图的html"。

用法 坐标

svg的坐标系统与html的一样,都是以元素的左上角为(0, 0)坐标。

根元素

首先声明一个根元素svgsvg元素上的属性是必不可少的。




1、version和baseProfile确定svg的版本
2、width、height指定svg的宽高
3、xmlns指定命名空间。
绘制图形
// 在坐标为(10,10)的地方,绘制宽高为30,轮廓宽5(黑色),用白色填充的矩形


// 绘制半径为80,圆心位置为(150,100), 填充为绿色的圆


// 连接(10,50)和(110,150)两个点的一条线 


// 绘制椭圆。中心为:(75,75),长半径为:20,短半径为:5


// 绘制折线,points为折线上的点。


// 路径。d代表的是:一个点集数列以及其它关于如何绘制路径的信息。highcharts的曲线就是使用path画的。path很强大,很复杂,需要一定的数学基础。这里就不详细说了。



等等...
g元素

元素g是用来组合对象的容器。添加到g元素上的变换会应用到其所有的子元素上。添加到g元素的属性会被其所有的子元素继承。此外,g元素也可以用来定义复杂的对象,之后可以通过use元素来引用它们。


  
    
    
    
    
  
use元素

use元素在SVG文档内取得目标节点,并在别的地方复制它们。use元素就相当于html中的模板。


   
  
    
      
    
  
 
  black
  
  red
  
  blue
  
 
在svg中使用CSS

在svg中是可以使用css控制样式的,跟html没什么区别。但是,并不是所有的属性都可以用css来设置。比如,widthheight等,就不能使用css来设置,必须写在svg元素上,如

那么哪些属性可以通过css来设置呢?

可以使用css来设置:https://www.w3.org/TR/SVG/pro...

不能使用css来设置:https://www.w3.org/TR/SVG/att...

在svg中,也是可以像html一样使用class的,比如:


    12:48


.test {
    font-size:12px;
    color:#333333;
    fill:#333333;
}
svg中使用CSS需要注意的地方

注意,svg中的css和html的css还是有不一样的地方。最重要,也是最容易出错的,就是transform这个属性。之前就被深深地坑过。

已经有文章说得很详细了,这里就不一一说明了。文章地址:

https://www.zhangxinxu.com/wo...

https://css-tricks.com/transf...

在svg中使用DOM操作

在svg中使用DOM操作和在html中是一样的。比如:



const rect = document.querySelector("rect");
rect.getAttribute("x"); 
rect.setAttribute("x", "100");
rect.addEventListener("click", _ => { console.log(1) });
...

只需要将svg看成html一样来进行DOM操作,没有任何问题。

svgcanvas的比较

两者在作用上都是一样的,都是在h5页面上进行图像的绘制。但是两者还是有显著的区别。

svg是用xml来描述图形的,而canvas使用js来绘制图形。这点上,svg更简单。

svg支持事件处理器,canvas不支持事件处理器。

svg是基于矢量的,可以很好的处理图像大小变化。而canvas是基于位图的,无法进行大小变化。

canvas提供的功能更原始,适合像素处理,动态渲染和大数据量绘制。当元素特别多的时候,canvas的性能更好。毕竟10000多个dom元素的svg,浏览器肯定吃不消。

等等...

结束语

也是最近老接触svg,所以稍微研究了一下。前端可视化是一个充满挑战,也是一个十分有意思的方向,值得深入研究。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/95710.html

相关文章

  • 【前端学习】-粗谈选择器

    摘要:对于一个前端,选择器是日常生活中必须接触的部分,这篇文章主要探讨一下选择其的分类及一些小技巧。 对于一个前端er,选择器是日常生活中必须接触的部分,这篇文章主要探讨一下选择其的分类及一些小技巧。 【分类】1.基础选择器2.结构选择器3.伪类选择器4.伪元素5.属性选择器 【描述】1.基础选择器(浏览器都兼容) * 通配符 (可以匹配元素中所有的html元素) 如:*{color...

    Charlie_Jade 评论0 收藏0
  • 马克当指南

    摘要:马克当可以做什么代码高亮制作待办事项高效绘制流程图序列图甘特图表格流程图序列图甘特图表格书写数学公式有道云笔记简明版使用指南标题标题是每篇文章必备而且最常用的格式。 马克当可以做什么? ① 代码高亮 showImg(https://segmentfault.com/img/bVbaZ60?w=1473&h=659); ② 制作待办事项To-do List showImg(https:/...

    Caizhenhao 评论0 收藏0
  • 马克当指南

    摘要:马克当可以做什么代码高亮制作待办事项高效绘制流程图序列图甘特图表格流程图序列图甘特图表格书写数学公式有道云笔记简明版使用指南标题标题是每篇文章必备而且最常用的格式。 马克当可以做什么? ① 代码高亮 showImg(https://segmentfault.com/img/bVbaZ60?w=1473&h=659); ② 制作待办事项To-do List showImg(https:/...

    sihai 评论0 收藏0
  • 马克当指南

    摘要:马克当可以做什么代码高亮制作待办事项高效绘制流程图序列图甘特图表格流程图序列图甘特图表格书写数学公式有道云笔记简明版使用指南标题标题是每篇文章必备而且最常用的格式。 马克当可以做什么? ① 代码高亮 showImg(https://segmentfault.com/img/bVbaZ60?w=1473&h=659); ② 制作待办事项To-do List showImg(https:/...

    zero 评论0 收藏0

发表评论

0条评论

el09xccxy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<