前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SVG绘图-SVG.js

SVG绘图-SVG.js

作者头像
码客说
发布于 2021-12-05 01:48:42
发布于 2021-12-05 01:48:42
6.3K00
代码可运行
举报
文章被收录于专栏:码客码客
运行总次数:0
代码可运行

前言

本文是在SVG.js 3.0的前提上,和2.xAPI不一致。

官方文档:https://svgjs.dev/docs/3.0/getting-started/

这个库相比原生开发有以下几点优点:

  1. API调用简单
  2. 组件定位方式统一,比如原生圆形设置的是中心点,而矩形就又是左上角,这样设置位置的时候还要判断是什么图形,分别计算设置。

引用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="https://cdn.jsdelivr.net/npm/@svgdotjs/svg.js@3.0/dist/svg.min.js"></script>

或者

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { SVG } from '@svgdotjs/svg.js'

简单示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>SVGJS</title>
    <script src="https://cdn.jsdelivr.net/npm/@svgdotjs/svg.js@3.0/dist/svg.min.js"></script>
  </head>
  <body>
    <div id="drawing"></div>
  </body>
  <script type="text/javascript">
    var draw = SVG().size("100%", "100%").addTo("#drawing");
    draw.rect(100, 100).attr({ fill: "#f06" });
  </script>
  <style>
    body {
      margin: 0;
      padding: 0;
    }

    #drawing {
      width: 100vw;
      height: 100vh;
    }
  </style>
</html>

SVG()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建使用该方法
var draw = SVG()
var draw = SVG().addTo('#drawing')

// 这个方法只能获取不能创建
var rect = SVG('#myRectId')
// 不写#也是按ID获取
var rect = SVG('myRectId')

// any css selector will do
var path = SVG('#group1 path.myClass')

// 创建图形
var circle = SVG('<circle>')

// 转换dom为svgjs对象
var obj = SVG(node)

各种图形

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>SVGJS</title>
    <script src="https://cdn.jsdelivr.net/npm/@svgdotjs/svg.js@3.0/dist/svg.min.js"></script>
  </head>
  <body>
    <div id="drawing"></div>
  </body>
  <script type="text/javascript">
    var draw = SVG().size("100%", "100%").addTo("#drawing");

    // 圆形
    var c1 = draw
      .circle(60)
      .move(0, 0)
      .fill("#ffe7f4")
      .stroke({ width: 1, color: "#f883c9" });

    // 矩形
    var r1 = draw
      .rect(100, 60)
      .move(0, 70)
      .fill("#ffe7f4")
      .stroke({ width: 1, color: "#f883c9" });
    // 矩形
    var r2 = draw
      .rect(100, 60)
      .radius(10)
      .move(110, 70)
      .fill("#ffe7f4")
      .stroke({ width: 1, color: "#f883c9" });
    // 两侧椭圆矩形
    var r3 = draw
      .rect(100, 60)
      .radius(30)
      .move(220, 70)
      .fill("#ffe7f4")
      .stroke({ width: 1, color: "#f883c9" });
    // 正方形
    var r4 = draw
      .rect(60, 60)
      .move(330, 70)
      .fill("#ffe7f4")
      .stroke({ width: 1, color: "#f883c9" });

    // 椭圆形
    var e1 = draw
      .ellipse(100, 60)
      .move(0, 140)
      .fill("#ffe7f4")
      .stroke({ width: 1, color: "#f883c9" });
    // 菱形
    var polygon = draw
      .polygon("0,50 50,0 100,50 50,100")
      .move(0, 210)
      .fill("#ffe7f4")
      .stroke({ width: 1, color: "#f883c9" });

    // 红心
    var p1 = draw
      .path(
        "M 10,30 A 20,20 0,0,1 50,30 A 20,20 0,0,1 90,30 Q 90,60 50,90 Q 10,60 10,30 z"
      )
      .move(0, 320)
      .fill("#ffe7f4")
      .stroke({ width: 1, color: "#f883c9" });

    // 线
    var line = draw
      .line(0, 0, 100, 60)
      .move(0, 410)
      .stroke({ width: 2, color: "#f06" });

    // 图片
    var image = draw.image("./imgs/jian.jpg").size(100, 100).move(0, 480);

    // 文字
    var text = draw
      .text("码客说")
      .font({
        family: "Helvetica",
        size: 34,
        anchor: "middle",
        leading: "1.5em"
      })
      .move(110, 513)
      .fill("#ffffff")
      .stroke({ width: 1, color: "#f883c9" });
  </script>
  <style>
    body {
      margin: 0;
      padding: 10px;
      background-color: #f3f3f3;
    }

    #drawing {
      width: calc(100vw - 20px);
      height: calc(100vh - 20px);
      background-color: #ffffff;
    }
  </style>
</html>

效果

容器

SVG.G

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var group = draw.group()
group.path('M10,20L30,40')

SVG.Symbol

Symbol相当于模板,模板中能够添加多个元素。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var symbol = draw.symbol();
symbol.rect(100, 100).move(0, 0).fill("#f09");
symbol.circle(100).move(0, 110).fill("#f09");

var use = draw.use(symbol).move(110, 0);

SVG.Defs

基本用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var defs = draw.defs();
var r1 = defs.rect(100, 100).fill("#f09");
var use = draw.use(r1).move(110, 0);

对比

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var r1 = draw.rect(100, 100).fill("#f09");
var use = draw.use(r1).move(110, 0);

我们会发现

前者相当于创建的模板定义,再使用,模板本身是不显示的。 后者是以现存的元素为模板复制了一份,两个元素都会显示。

Defs和Symbol

defssymbol的相同点

  • defs元素用于预定义一个元素使其能够在SVG图像中重复使用。 symbol元素用于定义可重复使用的符号。
  • 嵌入在defssymbol元素中的图形是不会被直接显示的,除非你使用元素来引用它。

defssymbol的不同点

  • xlink定义了一套标准的在 XML 文档中创建超级链接的方法,可以用它来引用元素或内定义的元素和组。
  • 一个symbol元素可以有preserveAspectRatioviewBox属性。而g元素不能拥有这些属性。

因此相比于在defs元素中使用g的方式来复用图形,使用symbol元素也许是一个更好的选择。

Defs也相当于定义,不同与Symbol,定义本身不能直接use,定义下的元素才能使用,要实现上面的效果还要用group把多个元素包起来。

同样功能两者实现对比:

Symbol

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var symbol = draw.symbol();
symbol.rect(100, 100).move(0, 0).fill("#f09");
symbol.circle(100).move(0, 110).fill("#f09");

var use = draw.use(symbol).move(110, 0);

Defs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var defs = draw.defs();
var group = defs.group();
group.rect(100, 100).move(0, 0).fill("#f09");
group.circle(100).move(0, 110).fill("#f09");

var use = draw.use(group).move(110, 0).size(100, 100);

SVG.A

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var link = draw.link('https://www.psvmc.cn')
var rect = link.rect(100, 100)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
svg.js教程及使用手册详解(二)
上篇简要介绍了svg.js的基本信息和基本用法,这篇开始详细讲解svg.js的用法。
王金龙
2018/08/24
6.5K1
svg.js教程及使用手册详解(一)
   做毕设的时候,因为要使用到画图和自定义动画,所以接触到了SVG。网上关于SVG和Canvas的对比很多,具体的辨析这里就不赘言。网上关于SVG的所谓教程基本上都是SVG本身,但是却没有一个针对svg.js这样的集成的SVG库进行具体讲解的教程,做这件事的,本文应该是第一篇,也是给那些需要动态的使用SVG的兄弟们一点帮助。
王金龙
2019/02/25
8.5K0
SVG 入门指南(初学者入门必备)
SVG,即可缩放矢量图形(Scalable Vector Graphics),是一种 XML 应用,可以以一种简洁、可移植的形式表示图形信息。目前,人们对 SVG 越来越感兴趣。大多数现代浏览器都能显示 SVG 图形,并且大多数矢量绘图软件都能导出 SVG 图形。SVG 主要可以概括为以下几点:
前端小智@大迁世界
2020/07/29
3.4K0
SVG 入门指南(初学者入门必备)
SVG 动画精髓
TL;DR 本文主要是讲解关于 SVG 的一些高级动画特效,比如 SVG 动画标签,图形渐变,路径动画,线条动画,SVG 裁剪等。 例如:路径动画 图形渐变: 线条动画: 以及,相关的动画的矩阵知识,
villainhr
2018/07/03
3.4K0
一篇文章带你了解SVG <use> 元素
SVG <use>元素可以重用SVG文档中其他位置(包括 <g>元素和 <symbol>元素)的SVG形状。可以在 <defs>元素内部(使形状直到使用之前不可见)或外部定义重用形状。
前端进阶者
2021/01/22
3.9K0
SVG 动画精髓(下)
本文作者:ivweb villainthr 接SVG 动画精髓(上) 线条动画 SVG 中的线条动画常常用作过渡屏(splash screen)中。例如: 或者,一些比较炫酷的 LOGO 中,比如
腾讯IVWEB团队
2017/07/07
1.9K0
SVG 动画精髓(下)
two.js konvas.js helloworld
两个画图用的JS框架。前端框架的名字都蛮有意思的, two.js - three.js - D3.js , canvas - konvas.js , view - vue.js ...
vanguard
2020/03/10
11.5K0
SVG基础知识
之前有提到过SVG描边动画,可以实现很神奇的手写签名动画效果,当然,理论上可以用来实现任意不规则路径填充动画
ayqy贾杰
2019/06/12
2.1K0
三天学会HTML5——SVG和Canvas的使用
在第一天学习了HTML5的一些非常重要的基本知识,今天将进行更深层学习 首先来回顾第一天学习的内容,第一天学习了新标签,新控件,验证功能,应用缓存等内容。 第2天将学习如何使用Canvas 和使用SVG 实现功能 Lab1—— 使用Canvas Canvas 是指定了长度和宽度的矩形画布,我们将使用新的HTML5 JavaScript,可使用HTML5 JS API 来画出各种图形。 初始化 1. 创建HTML页面 <html> <head></head> <body></body> </html> 2.
葡萄城控件
2018/01/10
2.8K0
三天学会HTML5——SVG和Canvas的使用
SVG绘图表格统计
用SVG绘图写一个表格统计的效果,类似于百度图表工具Echarts实现的效果。 实现效果如下: 实现代码如下: <!DOCTYPE html> <html> <head lang="zh-cn">
越陌度阡
2020/11/26
1K0
SVG绘图表格统计
带你了解SVG标签
✍️ 作者简介: 前端新手学习中。 💂 作者主页: 在主页中查看更多前端教学,可接大学生前端作业单。 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习 js学习 目录 初始SVG 矩形,圆形和椭圆型  矩形  圆形  椭圆形 绘制线条 多边形 连续线条  线条  多边形  连续线条 绘制文本 绘制路径 阴影和模糊 初始SVG SVG是一种图形文件格式,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。它是基于XML(Ext
坚毅的小解同志的前端社区
2023/01/13
2.1K0
带你了解SVG标签
SVG 图像入门教程
SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable Vector Graphics)。其他图像格式都是基于像素处理的,SVG 则是属于对图像的形状描述,所以它本质上是文本文件,体积较小,且不管放大多少倍都不会失真。
ruanyf
2018/08/09
1.8K0
SVG 图像入门教程
SVG绘图
前言 图形 SVG <svg id="test_1" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="600" height="400" viewBox="0 0 300 200"> <g style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1"> <rect x="10" y="10" width="100" he
码客说
2021/12/05
2.2K0
基于HTML/CSS/JS的动态元素周期表
https://wanghao221.github.io/game/yuansuzhouqibiao/
海拥
2021/08/23
1.6K0
基于HTML/CSS/JS的动态元素周期表
SVG绘制星空效果
主要代码: 代码详见GitHub:https://github.com/toly1994328/svg-night: svg星空 <!DOCTYPE html> <html lang="en">
张风捷特烈
2018/09/26
1.4K0
SVG学习笔记,持续记录。
SVG是一种用XML定义的语言,用来描述二维矢量及矢量/栅格图形。SVG提供了3种类型的图形对象:矢量图形(vectorgraphicshape,例如:由直线和曲线组成的路径)、图像(image)、文本(text)。图形对象还可进行分组、添加样式、变换、组合等操作,特征集包括嵌套变换(nestedtransformations)、剪切路径(clippingpaths)、alpha蒙板(alphamasks)、滤镜效果(filtereffects)、模板对象(templateobjects)和其它扩展(extensibility)。
房东的狗丶
2023/02/17
3K0
SVG学习笔记,持续记录。
SVG基础知识速查笔记
svg是指可缩放矢量图形,是用于描述二维矢量图形的一种图形格式。svg使用XML格式来定义图形,除ie8之前版本外,绝不部分浏览器均支持svg,可将svg文本直接嵌入HTML中显示。
前端_AWhile
2019/09/06
2K0
一篇文章教会你使用SVG 填充图案
SVG填充图案用于用由图像组成的图案填充形状。该图案可以由SVG图像(形状)或位图图像组成。SVG填充模式看起来就像从Photoshop等中所习惯的那样,被称为“平铺”。
前端进阶者
2021/03/03
2.1K0
一篇文章教会你使用SVG 填充图案
评价打分组件,SVG 半颗星的解决方案!
对于一个内容服务的网站来说评价打分也是很重要的一部分,它有利于分析用户对我们的内容的喜好程序。最近,我们团需要为一个项目实现一个星级评价的组件,需求如下:
前端小智@大迁世界
2022/06/15
7080
评价打分组件,SVG 半颗星的解决方案!
一篇文章带你了解SVG <clippath>剪切路径
SVG剪切路径(也称为SVG剪切)用于根据特定路径剪切SVG形状。路径内部的形状部分可见,外部的部分不可见。
前端进阶者
2021/01/22
2.6K0
相关推荐
svg.js教程及使用手册详解(二)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文