首页 > 其他分享 >【前端可视化】SVG 学习知识点

【前端可视化】SVG 学习知识点

时间:2023-04-20 22:25:39浏览次数:34  
标签:知识点 动画 SVG 元素 stroke 可视化 坐标系 属性

基本概念和语法

SVG 的定义和历史

SVG 是可缩放矢量图形(Scalable Vector Graphics)的缩写,它是一种用于描述二维矢量图形的 XML 标记语言。与传统的栅格图像不同,SVG 图像可以无限缩放而不会失真,同时也支持交互和动画等特性。

SVG 最早于 1999 年由 W3C 发布,用于在 Web 上展示矢量图形,并于 2001 年正式成为标准。在过去的二十多年中,SVG 经历了多次更新和改进,增加了更多的功能和特性,如动画、交互等,并逐渐得到广泛的应用。

SVG 2.0 于 2016 年 9 月 15 日成为 W3C 候选推荐标准,最新草案于 2020 年 5 月 26 日发布。

SVG 的优点和缺点

SVG 的优点包括:

  1. 矢量图形缩放不会失真(像素点数量不变而导致图像出现模糊、锯齿等),而光栅图形(PNG、JPG)缩放会导致失真。
    • 矢量图形:基于矢量的点、线、形状和数学公式来构建的图形,该图形是没有像素的,放大缩小是不会失真的。
    • 光栅图形:由像素点构建的图像——微小的彩色方块,大量像素点可以形成高清图像,比如照片。图像像素越多,质量越高。
  2. 其他优点:灵活(JS 和 CSS 操作);支持动画;轻量(尺寸小);可打印(不会失真);利于 SEO(会被搜索引擎索引);可压缩;易于编辑等。

SVG 的缺点包括:

  1. 不适和高清图片制作(非像素级渲染);
  2. SVG 图像变得复杂时,加载会比较慢;
  3. 存在部分浏览器兼容问题。

SVG 的应用场景

  • SVG 非常适合显示矢量徽标(Logo)、图标(ICON)和其他几何设计。
  • SVG 适合应用在需适配多种尺寸的屏幕上展示,因为SVG的扩展性更好。
  • 当需要创建简单的动画时,SVG 是一种理想的格式。
    • SVG 可以与 JS 交互来制作线条动画、过渡和其他复杂的动画。
    • SVG 可以与 CSS 动画交互,也可以使用自己内置的 SMIL 动画。
  • SVG 也非常适合制作各种图表(条形图、折线图、饼图、散点图等等),以及大屏可视化页面开发。

SVG 的文件结构和语法规则

SVG 的文件结构和语法规则包括以下几点:

  1. 文件格式:SVG 文件是一种基于 XML 语法的文本文件,以 .svg 或 .svgz 为后缀名。其中,.svg 是未压缩的文本格式,而 .svgz 是经过压缩的二进制格式。
  2. XML声明:SVG文件必须以XML声明开始,指定XML版本和字符集。例如:
<?xml version="1.0" encoding="UTF-8"?>
  1. 命名空间:SVG使用命名空间来区分不同元素和属性的定义和作用(现代浏览器会默认添加)。SVG 默认命名空间为 "http://www.w3.org/2000/svg" ,可以通过 xmlns 属性来指定和扩展其他命名空间。例如:
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink">
  1. 根元素 SVG 文件必须包含一个根元素 <svg>,表示图形容器的大小和属性。其中,width 和 height 属性指定画布的宽度和高度,viewBox 属性指定可视范围的位置和大小。
  2. 元素和属性 SVG 文件中包含多个元素和属性,用于描述和绘制图形。常见的元素包括 <rect>、<circle>、<line>、<path> 等,常见的属性包括 fill、stroke、stroke-width、transform 等。
  3. 嵌套和顺序 SVG 元素可以嵌套在其他元素中,形成复杂的图形结构。元素的顺序和层次决定了它们的显示顺序和遮挡关系。

图形绘制基础

SVG 坐标系和单位

SVG 使用的坐标系统(网格系统)和 Canvas 的差不多(笛卡尔坐标系)。坐标系是以左上角为 (0,0) 坐标原点,坐标以像素为单位,x 轴正方向是向右,y 轴正方向是向下。

SVG 坐标系统,在没有明确指定单位时,默认以像素为单位,我们也可以手动指明坐标系的单位。

SVG 坐标系分为视口坐标系和用户坐标系:

视口坐标系(视口-viewport):视口坐标系是在视口上建立的坐标系,原点在视口左上角的点(0, 0),x轴正向向右,y轴正向下。

用户坐标系(视图框-viewBox):用户坐标系是建立在 SVG 视口上的坐标系。该坐标系最初与视口坐标系相同——它的原点位于视口的左上角。使用 viewBox 属性,可以修改初始用户坐标系,使其不再与视口坐标系相同。

SVG 常见形状和元素

常见的 SVG 形状包括:矩形(rect)、圆形(circle)、椭圆形(ellipse)、线段(line)、折线(polyline)、多边形(polygon)

常见的 SVG 元素还包括:

  • path:路径
  • image:图片
  • text、tspan:文字
  • g 、defs、use、symbols:图形组合和复用

SVG 路径和路径命令

在 SVG 中,可以使用路径 <path> 来描述复杂的图形。路径由一系列的路径命令组成,常用的路径命令包括:M(移动到)、L(画直线)、Z(关闭路径)、H(水平线)、V(垂直线)、C(贝塞尔曲线)等。

SVG 填充和描边效果

使用属性 fill(填充) 和 stroke(描边),其中描边属性中 stroke-dasharray(将虚线类型应用在边框上)和 stroke-dashoffset(指定在dasharray模式下路径的偏移量)是 SVG 路径动画的应用原理。

填充和描边也能使用 css 来进行控制,其 css 样式优先级为:

内联的 style > defs 中的 style > 外部 / head 内部 > 属性 fill

SVG 渐变和滤镜效果

SVG 渐变有两种类型:线性渐变和径向渐变

线性渐变使用 linearGradient 和 stop 元素,例如:

<linearGradient id="gradient1">
  <stop offset="0%" stop-color="red"></stop>
  <stop offset="50%" stop-color="green"></stop>
  <stop offset="100%" stop-color="blue"></stop>
</linearGradient>

滤镜效果通过在 defs 中定义,比如定义一个高斯模糊效果:

   <defs>
	<!-- 高斯模糊效果 -->
	<filter id="blurFilter">
	  <feGaussianBlur stdDeviation="8"></feGaussianBlur>
	</filter>
  </defs>

SVG 的形变操作

SVG 的形变支持平移(translate)、旋转(rotate)等,注意:形变会修改坐标系,SVG 渲染是先形变修改了坐标系后,根据新坐标系再设置元素 xy 坐标。

SVG 的描边动画

原理为 stroke-dasharray(描边虚线) 和 stroke-dashoffset(虚线偏移量) 属性的设置。将描边设置为虚线,接着将描边偏移到不可见处,通过动画让描边慢慢变为可见,这样就产生了动画效果了。例如:

#line {
/* 指定为虚线,300px大于或等于路径长度,虚线和偏移量大小会影响动画速度*/
	stroke-dasharray: 300px;
	/* 可见 */
	stroke-dashoffset: 300px;
	animation: line1Move 2s linear forwards;
}
@keyframes line1Move {
	100% {
	/* 可见 */
	stroke-dashoffset: 0px;
	}
}

支持 stroke 属性的元素都能实现该动画,比如:path、ellipse、polyline 等。

动画和交互

SVG 动画的实现方式

  1. 用 JS 脚本实现:通过各种处理 SVG 的 JavaScript 库实现动画和交互效果。

  2. 用 CSS 样式实现:主要是使用 CSS3 的动画属性。

  3. 用 SMIL 实现:一种基于 SMIL 语言实现的 SVG 动画。

SMIL(Synchronized Multimedia Integration Language 同步多媒体集成语言,是W3C推荐的可扩展标记语言,用于描述多媒体演示)

SVG 的 SMIL 动画元素

SVG 中支持 SMIL 动画的元素:

  • set:经过特定时间间隔后,将属性设置为某个值(不是过度动画效果)。
  • animate:给某个属性创建过度动画效果。需将animate元素嵌套在要应用动画的元素内。
  • animateTransform:指定目标元素的形变(transform)属性,从而允许控制元素的平移、旋转、缩放或倾斜动画(类似于 CSS3 的形变)。
  • animateMotion:定义了一个元素如何沿着运动路径进行移动。

SVG 动画库-Snap.svg

Snap.svg 是一个专门用于处理 SVG 的 JavaScript 库 ( 类似jQuery )。

SVG 动画库-GSAP 动画库

GSAP 全称是( GreenSock Animation Platform)GreenSock 动画平台。
GSAP 是一个强大的 JavaScript 动画库,可让开发人员轻松的制作各种复杂的动画。
与 Snap.svg 不一样,GSAP 无论是 HTML 元素、还是 SVG、或是 Vue、React 组件的动画,都可以满足你的需求。

标签:知识点,动画,SVG,元素,stroke,可视化,坐标系,属性
From: https://www.cnblogs.com/cqkjxxxx/p/17338547.html

相关文章

  • pytorch训练可视化包visdom的使用
    visdom的使用一、简介二、安装与启动三、设计思路四、在迭代训练中的绘图五、一般绘图六、基本调整与保存文件1、`调整大小、拖拽`:长按拖动即可,右下角落长按移动即可放大缩小2、`查看图片对应的数据`:点击右下角`Edit`,会跳转到新网页,可以灵活进行数据调整3、`图内控件调整`:比如,放大......
  • Makefile知识点-3------makefile定义“空格”变量的定义方法
    下面再介绍两个定义变量时我们需要知道的,请先看一个例子,如果我们要定义一个变量,其值是一个空格,那么我们可以这样来:nullstring:=space:=$(nullstring)#endofthelinenullstring是一个Empty变量,其中什么也没有,而我们的space的值是一个空格。因为在操作符的右边是很难描述......
  • 低代码开发重要工具:jvs-logic(逻辑引擎)可视化设计要素
    逻辑引擎可视化的交互可视化的服务编排是逻辑引擎的核心功能,逻辑引擎的界面可视化设计是为了方便用户使用和操作逻辑引擎而设计的。一个好的界面设计能够提高用户的工作效率和使用体验,同时也能增加软件的可靠性和可维护性。以下是逻辑引擎界面可视化设计的一些要素:1.界面布局界面......
  • Java基础知识点API之System
    一:System的介绍总的来说,System类提供了一些与系统相关的方法二:System类的常见方法publicstaticvoidexit(intstatus)终止当前运行的虚拟机publicstaticvoidlongcurrentTimeMil(isc)返回当前系统的时间毫秒值形式publicstaticvoidgc()运行垃圾回收器publicstaticString......
  • 数据分析的基本知识介绍,通过Python创建一些漂亮的数据可视化
    近一年势头不灭的Python在数据分析领域,是专家们的必备技能。随着IT行业的增长,对有经验的数据科学家的需求也水涨船高,而Python也一跃而成最受欢迎的语言。介绍数据分析的基本知识,并利用Python创建一些漂亮的数据可视化。概要为什么要学数据科学中的Python?Python简介为数据......
  • RabbitMQ队列和交换机的相关知识点
    1、关于交换机和队列的autodelete属性交换机的autodelete属性作用:当属性值设置为true,那么当所有的队列断开于交换机的绑定,那么交换机会自动删除队列的autodelete属性作用:自动删除队列和普通队列在使用上没有什么区别,唯一的区别是,当所有的相关消费者断开连接时,队列将会被删除2......
  • selenium部分知识点总结
    selenium部分总结最近写了一个selenium自动化脚本.基于此总结一些常用的代码1.用户输入换行符不终止输入strings=''s=input('请输入:(q停止输入)')whiles!='q':#此处可自行设置strings=strings+s+'\n's=input()"""输入:B07RW2M73......
  • Golang 知识点
    make和new的区别:make用于创建切片、映射和通道,返回的是创建类型的引用。new用于创建任意类型的指针,返回的是该类型的指针。//make用法示例slice:=make([]int,5)//创建一个包含5个元素的整型切片//new用法示例varpointer*intpointer=new(int)//创......
  • js知识点
    目录js知识点js数据类型数组forEach()补充三元运算函数函数的全局变量和局部变量内置对象和方法自定义对象Date对象Date对象的方法JSON对象EegExp对象MAth对象BOM和DOMBOM弹出框计时相关DOM标签查找间接查找节点操作属性节点获取值操作class的操作事件绑定方法js知识点jsjs的......
  • 杭州出租车行驶轨迹数据空间时间可视化分析|附代码数据
    原文链接:http://tecdat.cn/?p=7324最近我们被客户要求撰写关于出租车的研究报告,包括一些图形和统计输出。城市化带来的道路拥堵、出行耗时长等交通问题给交管部门带来了巨大的挑战▼通过安装在出租车上的GPS设备,可以采集到大量的轨迹数据,从而帮助我们分析人们出行信息,达到优化交通......