SVG.js包的使用

【SVG.js实战篇】01-Vue中优雅的使用SVG.js 一、关于SVG.js SVG.js是一个基于SVG的开源JS库,支持操作 SVG 和执行 SVG 动画。真的很好用!(在实际项目场景中,使用SVG.js很便利友好) github仓库 官方文档 本文Demo源码 二、安装 // npm npm install @svgdotjs/svg.js // yarn yarn add @svgdotjs/svg.js 三、项目中引入 import { SVG } from "@svgdotjs/svg.js" 四、绘制基础图形 绘制图形之前,首先需要创 阅读详情
AI摘要

本文详细介绍了SVG.js库的使用方法,包括如何安装、基本矢量图形绘制及复杂路径绘制技巧。SVG.js是一个轻量级的JavaScript库,用于在浏览器中创建和操作SVG矢量图形。

1、SVG.js包简介

SVG.js是用于绘制矢量图和制作矢量动画的轻量级js库。

官网:https://svgjs.com/

(1)SVG.js包的开发文档

W3C关于SVG.js包的文档(英文)

https://www.w3.org/TR/SVG/

SVG.js包的英文开发文档,可以在官网和W3C上看到,但是中文的开发文档我没有找到,如果感觉英文看不习惯,可以使用Google浏览器,它的右上角有个按钮,点击“翻译此页”能够翻译整个网页。

 

 

2、SVG.js安装与入门

2.1 下载SVG.js包

(1)在SVG.js官网上下载
2.x版本下载地址:https://svgjs.com/docs/2.7/installation/
3.x版本下载地址:https://svgjs.com/docs/3.0/installation/
(2)在github上下载
下载地址:https://github.com/svgdotjs/svg.js
(3)在CNDJS上下载SVG.js包
SVG.js有很多版本,如果需要下载其他版本可以在CDNJS上下载。在CDNJS上,不仅可以搜索和下载js库,还可以找到相应js库的官网和github。
CDNJS的网址:https://cdnjs.com/

2.2 SVG.js入门

导入SVG.js包,绘制一个矩形
代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>绘制矢量图</title>
        <script type="text/javascript" src="js/svg-2.7.1.min.js" ></script>
    </head>
    <body>
        <div id="drawing"></div>    
    </body>
    <script type="text/javascript">
        //判断浏览器是否支持绘制SVG
        if (SVG.supported) {
            var drawing = SVG("drawing").size('100%', '100%');
            drawing.rect(100, 100).attr({ fill: '#f06' })
        }else{
            alert("浏览器不支持SVG!")
        }
    </script>
</html>


3、SVG.js绘制矢量图

3.1 基本介绍

此包能够绘制矩形(rect())、圆(circle())、椭圆(ellipse())、直线(line())、折线(polyline())、多边形(polygon())等,上述的方法比较简单,参见官网开发文档中的Elements目录即可。本段介绍一下绘制path路径中的参数和命令。

绘制path的命令如下:
M = moveto //绘制起始点;
L = lineto //绘制直线;
H = horizontal lineto //绘制水平直线
V = vertical lineto //绘制垂直直线
C = curveto //绘制曲线
S = smooth curveto //绘制平滑曲线
Q = quadratic Bézier curve //二次贝塞尔曲线
T = smooth quadratic Bézier curveto //平滑二次贝塞尔曲线
A = elliptical Arc //绘制椭圆弧线
Z = closepath //终止路径
注意:以上所有命令均允许小写字母。大写表示绝对定位,小写表示相对定位。

3.2 path路径绘制

注意:绘制路径时必须要有M或者m开头
(1)绘制一条直线(L)
绘制从(0,0)->(50,50)两点的直线,如下:
var pathStr = 'M0 0 L50 50';// L表示绘制直线,需要两个参数;

绘制从(0,0)->(50,0)两点的水平直线,如下:
var pathStr = 'M0 0 H50';//H表示绘制水平直线,仅仅需要一个参数50;
var pathStr = 'M0 0 L50 0';
var pathStr = 'M0 0 50 0';

绘制从(0,0)->(0, 50)两点的垂直直线,如下:
var pathStr = 'M0 0 V50';//V表示绘制垂直直线,仅仅需要一个参数50;
var pathStr = 'M0 0 L0 50';
var pathStr = 'M0 0 0 50';// 也可以不要L

(2)绘制多点折线(L)
绘制从(0,0)->(50, 50)->(20, 40)的折线
var pathStr = 'M0 0 L50 50 20 40';// 可以仅仅在第一个点后加1个L即可
var pathStr = 'M0 0 L50 50 L20 40';// 也可以在每个点前都加L
var pathStr = 'M0 0 50 50 20 40';// 还可以仅仅加1个M

(3)绘制曲线(C)
注意:绘制曲线必须至少4个点,1个起始点、3个曲线点,此外必须是3个点为1组。
绘制从(0,0)->(30,50)->(20,40)->(10,60)的曲线,共4个点。
var pathStr = 'M0 0 C30 50 20 40 10 60';

绘制从(0,0)->(30,50)->(20,40)->(10,60) ->(60,60)->(80,90)->(30,100)的曲线,共7个点。
var pathStr = 'M0 0 C30 50 20 40 10 60 C60 60 80 90 30 100';// 每3个点为1组,可以在前面C;
var pathStr = 'M0 0 C30 50 20 40 10 60 60 60 80 90 30 100';// 也可以在前面加1个C;
注意:如果这3个点(60,60)、(80,90)、(30,100)中缺少任何1个或2个,则这3个点都不能显示。

(4)绘制二次贝塞尔曲线(Q)
贝塞尔曲线类似于曲线,不过它是两个点为1组。
var pathStr = 'M0 0 Q30 50 20 40 Q10 60 60 60';
var pathStr = 'M0 0 Q30 50 20 40 10 60 60 60';
注意:如果这2个点(10,60) 、(60,60)缺少1个2个点都会显示。


(5)其他曲线
平滑曲线(S)的用法与二次贝塞尔曲线(Q)的用法相同。平滑二次贝塞尔曲线(T)与直线(L)的用法相同。
绘制平滑二次贝塞尔曲线(T)
var pathStr = 'M0 0 T30 50 T20 40 T10 60 T10 20';
var pathStr = 'M0 0 T30 50 20 40 10 60 10 20';

(6)绘制椭圆弧线(A)
绘制1椭圆圆弧必须要有7个参数,参数组成A rx ry x-axis-rotation large-arc-flag sweep-flag x y。
第1个参数rx:X轴的半径;
第2个参数ry:Y轴的半径;
第3个参数x-axis-rotation:弧线沿着X轴的旋转,一般默认为0;
第4个参数large-arc-flag:最大角度标识符号,只能是0或1,一般默认为1。
第5个参数sweep-flag:标识绘图的方向只能是0或1,1表示顺时针绘制弧线,0表示逆时针绘制弧线。
第6个参数sweep-flag:圆弧的结束点X;
第7个参数sweep-flag:圆弧的结束点Y;

绘制1个弧线
var pathStr = 'M50 0 A20 20 0 0 0 100 50';
绘制2个弧线
var pathStr = 'M50 0 A20 20 0 0 0 100 50 A20 20 0 0 1 200 200';
var pathStr = 'M50 0 A20 20 0 0 0 100 50  20 20 0 0 1 200 200';

运行结果如下:

 

4、实现的源代码

// 要看上述的代码结果,只需要替换下述的代码中相应部分的代码即可。
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>绘制矢量图</title>
        <script type="text/javascript" src="js/svg-2.7.1.min.js" ></script>
    </head>
    <body>
        <div id="drawing"></div>    
    </body>
    <script type="text/javascript">
        //判断浏览器是否支持绘制SVG
        if (SVG.supported) {
            var drawing = SVG("drawing").size('300', '300');
            // 绘制2个弧线
            var pathStr = 'M50 0 A20 20 0 0 0 100 50  20 20 0 0 1 200 200';
            var path = drawing.path(pathStr);
            // 无填充
            path.fill('none');
            // 设置线条的颜色、宽度、连接点形状
            path.stroke({ color: '#f06', width: 2, linecap: 'round', linejoin: 'round' });
        }else{
            alert("浏览器不支持SVG!")
        }
    </script>
</html>

如何将 SVG 导入 Next.js 应用程序 将 SVG 导入 Next.js 应用程序是我们当今项目的普遍需要。随着 SVG 格式现在从大部分库中获得的支持级别及其在可伸缩性、性能和灵活性方面的许多好处,如何安装和使用SSD(固态硬盘)了解如何使用它们对我们来说变得越来越重要。虽然我们主要关注 SVG,但我们将在本文中强调的大多数包也适用于其他图像格式。如何将旧SSD用作外部存储驱动器我们还将检查一些常见错误以及如何补救它们,以便您在将 SVG 导入 Next.js 项目时充满信心。 阅读详情

相关推荐

SVG.js 一个轻量且强大的图形库

SVG.js是一个专门用于操作 SVG 的 JavaScript 库,目标是让 SVG 的创建、变换、动画、交互变得更简单、直观。它最大的特点是:✅ API 简洁、链式调用友好✅ 文件体积小(压缩后不到 20KB)✅ 拓展性强,有丰富的插件体系✅ 不需要依赖第三方框架,纯原生 JavaScriptSVG.js 不仅让你告别繁琐的手写 SVG 标签,还能用现代化的链式 API 快速实现复杂的动画和交互。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 253

svg.js使用教程

在日常web开发过程中,我们会需要显示一些图形化的元素,使用div+css、ps图片是常见的实现方式。但使用svg来绘制可能更加合适,SVG是,有一些预定义的形状元素,可被开发者使用和操作: 矩形(rect)、 圆形(circle)、 椭圆(ellipse)、 线(line)、 折线(polyline)、 多边形(polygon)、 路径(path)。svg可以是独立的*.svg文件,可以通过来引入。也可以直接将svg代码写入html中,开发和使用起来非常灵活。本教程主要介绍svg.js。

IT飞牛 1万+

D3.js数据可视化JavaScript库本地包

D3.js是数据驱动文档(Data-Driven Documents)的缩写,它是一个基于Web标准的JavaScript库,用于使用HTML、SVG和CSS创建复杂的数据可视化图表。D3.js允许开发者通过数据来操纵文档的属性和内容,因此它特别适用于数据可视化领域。由于其灵活性和强大的数据绑定能力,D3.js已经成为数据可视化的首选工具之一。在本章中,我们将首先了解D3.js的定义和它如何将数据转化为引人入胜的视觉表现。

weixin_34511754的博客 1239

【亲测免费】 SVG.js:轻量级SVG操作与动画库

SVG.js 是一个轻量级的 JavaScript 库,专门用于操作和动画 SVG(可缩放矢量图形)。它不依赖于任何其他库,提供了简洁而强大的 API,使得开发者能够轻松地创建、修改和动画化 SVG 元素。无论是简单的图形绘制,还是复杂的动画效果,SVG.js 都能满足你的需求。 ## 项目技术分析 SVG.js 的核心优势在于其轻量级和高性能。它通过简洁的 API 设计,使得开发者能够以最少...

gitblog_00991的博客 1058

SVG.js SVG.js

SVG(Scalable Vector Graphics,可缩放矢量图形)是基于XML、用于描述二维矢量图形的一种图形格式。SVG由W3C制定,是一个开放标准。 SVG.js中包含了大量用于定义动画的方法,如移动、缩放、旋转、倾斜等,具体可参阅相关演示。 SVG.js中的一些亮点: 易读的简洁的语法 非常轻量,gzip压缩版只有5k 针对大小、位置、颜色等的动画元素 模块化结构,轻松扩展 各种实用插件 各种形状类型间拥有统一的API. 元素可以绑定事件,包括触摸事件 完全支持不透明蒙版 元素组 动态渐变 填充模式 完整的文档记录

数十个锂电池充放电电路,锂电池充放电芯片

关乎锂电池供电的产品,在锂电池上,需要三个电路系统:1,锂电池保护电路,2,锂电池充电电路,3,锂电池输出电路。 内容目录: 单节的锂电池保护电路单节为3.7V锂电池(也叫4.2V)和3.8V锂电池(也叫4.35V) 单节的锂电池充电电路即锂电池保护板 单节的锂电池输出电路锂电池转换稳压输出为:1.2V,3.3V,5V,12V等等 两节的锂电池保护电路两节串联7.4V锂电池(也叫8.4V) 两节的锂电池充电电路即两节锂电池保护板 两节...

kuakewei123的博客 1万+

vue使用vite-plugin-svg-icons插件组件化svg图片

组件化svg图片

qq_51389137的博客 1162

Claude Code+Cursor+Claude 4三剑合璧!5步搞定Magentic-UI的OAuth2.0集成,开发效率飙升500%,新手秒变全栈工程师

本文详细介绍了如何利用Claude Code、Cursor和Claude 4三款AI工具高效集成Magentic-UI的OAuth2.0认证系统。通过5个步骤的实战演练,开发者可快速完成从环境搭建、项目分析、代码生成到前端集成的全过程,显著提升开发效率。文章还提供了JWT令牌管理、安全配置及常见问题解决方案。

weixin_29234509的博客 453

instant-logos背后的技术架构:从SVG文件到npm包的实现原理

instant-logos是一个专注于提供高质量SVG格式品牌标志的开源项目,它将海量的SVG图标资源整合为便捷使用的npm包,为开发者和设计师提供了快速获取品牌标志的解决方案。本文将深入解析这个项目从原始SVG文件到最终npm包的完整技术实现流程。 ## 项目结构解析:模块化的架构设计 instant-logos采用了清晰的模块化架构,主要包含以下核心部分: - **SVG资源存储**:所

gitblog_01085的博客 401

「极简」扣子(coze)教程 | 细节决定成败!这个小功能让用户满意度飙升,讲的太细了

这一期大师兄通过向扣子(coze)应用添加提示语的方法向用户显示系统运行的状态。

u014527622的博客 2113

Java对接(BSC)币安链 | BNB与BEP20的开发实践(三)水龙头 WEB3

这一节我们讲一个币安测试链如何获取到BNB、USDT等BEP20数字货币(水龙头)来让我们前期测试开发。如图:我们将创建的地址填入相应输入框,来获取到测试BNB以及其他BEP20数字币。发币可能需要交易等待,请耐心等待即可,交易完成后,币会到达您的地址内。上一节我们用代码来实现BNB转账、BEP20转账、链上交易监控。2.MetaMask(小狐狸)浏览器插件 🪜。使用EDGE浏览器可以在浏览器直接打开。使用Chrome浏览器,请使用🪜打开。基本工作就绪后,即可进行开发测试。3. 测试区块链浏览器 🪜。

大猩猩的专栏 2790

IcoMoon-Free 图标包使用教程

IcoMoon-Free 是一个免费的开源向量图标包,由 Keyamoon 开发。该图标包中的图标设计基于 16px 的网格,因此在 16px 的倍数尺寸下使用时效果最佳,如 16px、32px、48px、64px 等。这个包包含了多种格式的图标,可以使用 PSD、PDF 或 AI(Adobe Illustrator)文件来访问所有图标。此外,该图标包还附带了一个桌面字体,可以安装到任何允许选择自...

gitblog_00788的博客 1031

保姆级教程:用DaVinci Configurator & Developer从零搭建AUTOSAR OS(TC2xx三核实战)

本文提供了一份详细的AUTOSAR OS配置指南,使用DaVinci Configurator和Developer工具从零开始搭建Infineon TC2xx三核系统。涵盖多核配置协同逻辑、版本兼容性陷阱及验证错误的解决方案,帮助开发者在3小时内构建可运行的多核OS框架。

weixin_33940469的博客 315

如何用Walkway.js快速创建惊艳的SVG路径动画

Walkway.js是一款轻量级JavaScript库,能帮助开发者轻松实现SVG路径动画效果。无论是简单的几何图形还是复杂的SVG图标,都能通过几行代码让它们"活"起来,为网页增添生动的视觉体验。本文将为你展示如何快速上手这个强大的动画工具。 ## 📋 什么是Walkway.js? Walkway.js是一个专注于SVG路径动画的JavaScript库,它通过控制SVG元素的描边动画,实现

gitblog_01124的博客 439

在ABAQUS中使用VUMAT子程序实现Hashin失效准则的详细解析与实践:深入探讨复合材料模拟仿真的高级编程技巧

Hashin失效准则是由材料科学家Shlomo Hashin于1962年提出的一种基于能量方法的多向失效理论,主要用于预测复合材料的破坏行为。与传统的单向失效理论不同,Hashin准则考虑了材料内部的多种独立破坏机制,如基体断裂、界面脱粘、纤维断裂等,这些机制在不同应力状态下可能同时或分别发生。通过计算各个机制的能量释放率,Hashin失效准则能够更为准确地预测复合材料在复杂应力状态下的破坏行为。

qq_38334677的博客 1949

COMSOL介电弹性体数值仿真指南:预拉伸圆形DEA的稳态变形分析(II)

本期博客是《COMSOL介电弹性体数值仿真指南》系列博客中的一期。聚焦于介电弹性体驱动器(DEA)中最为经典的预拉伸圆形DEA驱动器构型,对其在COMSOL平台中的具体建模步骤进行介绍与讨论。

忘了面孔的Batou 353

svg压缩

SVG图片压缩 这是个通过借助npm包的一种方式去压缩svg的图片,由于阿里的图库自己创建的图标有大小的限制,当我们想要自己用自己的图标的时候就可以使用这种方式去完成对svg的图片压缩。1、下载node.js (地址:https://nodejs.org/zh-cn/)2、下载svgo的包 下载node.js成功后,使用命令行安...

weixin_33965305的博客 3022

以阿克曼转向车为例对URDF和XACRO文件进行解读

   最近我在古月学院购买了在Gazebo中实现阿克曼转向车的仿真课程,课程资料的阿克曼小车的XACRO文件在Gazebo里加载的时候报了三个错误,在这之前,我没接触过URDF或XACRO文件,本篇文章就以这个阿克曼小车的XACRO文件为例,对URDF或XACRO文件的格式和内容进行解读,期望经过解读和学习,找到错误原因及所在,并解决这三个错误    先来放一下上面右图所示的模型的完整的XACRO文件: <?xml version="1.0"?> <!-- racecar.urdf.x

慕羽★的博客 3701

使用svg-icon组件步骤

第一步安装包:npm i svg-sprite-loader 第二部配置:vue.config.js //这是nodejs语法配置路径 const path = require('path') function resolve (dir) { return path.join(__dirname, dir) } { // 省略其他... chainWebpack (config) { // set svg-sprite-loader config.module

weixin_56562996的博客 478

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SVGO: Node.js 开发的 SVG 矢量图优化工具(svg压缩工具)

SVG图片压缩 这是个通过借助npm包的一种方式去压缩svg的图片,由于阿里的图库自己创建的图标有大小的限制,当我们想要自己用自己的图标的时候就可以使用这种方式去完成对svg的图片压缩。 1、下载node.js (地址:https://nodejs.org/zh-cn/) 即前提,必须本地部署好npm,否则就跑不起来。 2、下载svgo的包 下载node.js成功后,使用命令行安装 npm install -g svgo 项目官方网址: https://www.npmjs.com/package/svgo

逐浪CMS发哥的博客 1488

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

vue svg 图标_Vue.js的高质量SVG图标

vue svg 图标 英雄英雄 (vue-heroicons) A set of free MIT-licensed high-quality SVG icons for Vue.js development. 一组免费的MIT许可的高质量SVG图标,用于Vue.js开发。 View Demo 查看演示 View Github 查看Github 安装 (Install) npm i @by...

cuk5239的博客 262

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

怎么使用 Iconfont 的 svg 矢量图标

场景:ui设计师把设计图标上传到Iconfont,前端从Iconfont下载所有图标,然后在代码中使用 第一步:把项目的svg下载到本地 解压打开是这样的: 第二步:把下载的文件放进项目assets路径下 第三步:在main.js中引入iconfont文件 第四步:在业务页面使用,其中xlink:href就是对应的svg的id svg的id可以在Iconfont...

zhongmei121的专栏 5151

Lucide 静态资产(lucide-static)实战指南:SVG 文件、SVG Sprite、图标字体与 Node.js SVG 字符串导入

Lucide 是一个由社区驱动的开源图标工具包(Feather Icons 的分支),在常规的框架组件之外,它还提供了一个名为 `lucide-static` 的静态资产包:不依赖任何 JavaScript 框架,即可在纯 HTML、CSS、Node.js 服务端渲染与静态站点生成中使用 Lucide 图标。本文基于仓库中的 [docs/guide/static](https://link.git

gitblog_00822的博客 21

jquery 创建 SVG DOM 的处理方法

使用的是 createElement 方法 这个是无法生成SVG DOM的 可以使用下方的方法生成 [js] view plaincopy   var svgns = "http://www.w3.org/2000/svg";    $.svg = function $svg(tagName) {       return $(document.createElem...

weixin_34403693的博客 292

如何快速上手svg2pdf.js:5分钟完成SVG到PDF的完美转换

svg2pdf.js是一款强大的JavaScript工具,能够在浏览器环境中实现SVG到PDF的完美转换。作为yWorks公司推出的专业转换工具,它让开发者和设计师能够轻松将矢量图形转换为高质量的PDF文档,无需依赖任何后端服务。 ## 📋 核心功能与优势 svg2pdf.js作为一款专注于SVG到PDF转换的轻量级库,具有以下显著优势: - **纯前端解决方案**:整个转换过程在浏览器中

gitblog_00529的博客 449

React-SVG 使用教程

React-SVG 是一个用于在 React 应用中加载和显示 SVG 图标的库。它提供了简单易用的 API,使得在 React 组件中嵌入 SVG 文件变得非常方便。React-SVG 支持动态加载 SVG 文件,并且可以对 SVG 进行样式和属性的自定义。 ## 项目快速启动 ### 安装 首先,你需要通过 npm 或 yarn 安装 React-SVG: ```bash npm in...

gitblog_00452的博客 661
上一篇: Android中字体大小自适应设备
下一篇: Vue.js中变量的使用
MasonYyp
博客等级 码龄9年 301粉丝 297原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值