上篇简要介绍了svg.js的基本信息和基本用法,这篇开始详细讲解svg.js的用法。

SVG元素

SVG元素主要包括各种形状、线条、文本、路径。

矩形——Rect

Rects有两个参数,即矩形的宽度和高度:

var rect = draw.rect(100, 100)

椭圆——Ellipse

Ellipses就像矩形一样,有两个参数,横向和纵向的直径:

var ellipse = draw.ellipse(200, 100)

圆——Circle

Circles有一个参数,即圆的直径:

var circle = draw.circle(100)

倘若画椭圆的时候,设置其两个参数相同,那么实际上画出的图形和相同直径的圆是一样的。

直线——Line

四个参数,分别是直线起点和终点的x、y坐标:

var line = draw.line(0, 0, 100, 150).stroke({ width: 1 })

折线——Polyline

由三个或三个以上的点组成折线,也可以认为是不闭合的多边形。所以其参数就是折线顶点的坐标:

var polyline = draw.polyline('0,0 100,50 50,100').fill('none').stroke({ width: 1 })

其中用空格分开的每一对坐标x1,y1表示一个顶点的坐标,所以使用以下的这种集合的方式来表示点的坐标也是可以的:

var polyline = draw.polyline([[0,0], [100,50], [50,100]]).fill('none').stroke({ width: 1 })

多边形——Polygon

polyline画出的是折线,是不闭合的多边形,Polygon则相对的画出的是闭合的多边形。其参数是闭合多边形的顶点的坐标:

var polygon = draw.polygon('0,0 100,50 50,100').fill('none').stroke({ width: 1 })

二者的区别仅仅在于,起点和终点是否连接。

路径——Path

var path = draw.path('M10,20L30,40')

实际上svg.js中Path的使用方法跟SVG的Path的使用方法是一样的。具体如下:

M = moveto(M X,Y) :将画笔移动到指定的坐标位置
L = lineto(L X,Y) :画直线到指定的坐标位置
H = horizontal lineto(H X):画水平线到指定的X坐标位置
V = vertical lineto(V Y):画垂直线到指定的Y坐标位置
C = curveto(C X1,Y1,X2,Y2,ENDX,ENDY):三次贝赛曲线
S = smooth curveto(S X2,Y2,ENDX,ENDY)
Q = quadratic Belzier curve(Q X,Y,ENDX,ENDY):二次贝赛曲线
T = smooth quadratic Belzier curveto(T ENDX,ENDY):映射
A = elliptical Arc(A RX,RY,XROTATION,FLAG1,FLAG2,X,Y):弧线
Z = closepath():关闭路径

图片——Image

当需要在SVG画布上放置图片时,可以使用以下函数:

var image = draw.image('/path/to/image.jpg', 200, 200).move(100, 100)

其中第一个参数是图片路径,后两个参数分别表示图片的宽度和高度。

文本——Text

第一种是最简单的创建文本的方式:

var text = draw.text("Lorem ipsum dolor sit amet consectetur.\nCras sodales imperdiet auctor.")

以上代码会自动创建一个文本块,并在必要时插入换行。

第二种方式相对复杂,也增加了更多控制:

var text = draw.text(function(add) {
add.tspan('Lorem ipsum dolor sit amet ').newLine()
add.tspan('consectetur').fill('#f06')
add.tspan('.')
add.tspan('Cras sodales imperdiet auctor.').newLine().dx(20)
add.tspan('Nunc ultrices lectus at erat').newLine()
add.tspan('dictum pharetra elementum ante').newLine()
})

要获取text文本的内容:

text.content

要修改text文本的内容:

text.text('Brilliant!')

还有如下这种使用起来更自然的方式:

text.font({
family: 'Helvetica'
, size: 144
, anchor: 'middle'
, leading: '1.5em'
})

文本路径——TextPath

var text = draw.text(function(add) {
add.tspan('We go ')
add.tspan('up').fill('#f09').dy(-40)
add.tspan(', then we go down, then up again').dy(40)
})
text.path('M 100 200 C 200 100 300 0 400 100 C 500 200 600 300 700 200 C 800 100 900 100 900 100').font({ size: 42.5, family: 'Verdana' })

以上代码在执行时,将沿着给定的路径绘制文本。

继承——Use

var rect = draw.rect(100, 100).fill('#f09')
var use = draw.use(rect).move(200, 200)

如上代码所示,在SVG画布上将会出现两个rect,原始的rect和use的实例,任何在原始rect上所做的修改都将会在use的实例上显现。

如果我不想让原始的rect出现怎么办呢?

var rect = draw.defs().rect(100, 100).fill('#f09')
var use = draw.use(rect).move(200, 200)

如上,可以使用defs()方法,由此也拓展出一个更易于重用的SVG组件。可以将原始的rect当作一个库元素,可以通过use方法来进行重用而不会修改原始元素。

下一篇将持续更新svg.js中引用元素的方法,也即控制画布上的元素进行动画操作的方法,敬请期待!

原文链接:http://www.jinlongtalk.com/2017/02/21/svg-js2/

svg.js教程及使用手册详解(二)的更多相关文章

  1. svg.js教程及使用手册详解(一)

    做毕设的时候,因为要使用到画图和自定义动画,所以接触到了SVG.网上关于SVG和Canvas的对比很多,具体的辨析这里就不赘言.网上关于SVG的所谓教程基本上都是SVG本身,但是却没有一个针对svg. ...

  2. PHPExcel 中文使用手册详解 二

    $objPHPExcel = new \PHPExcel(); //定义配置 $topNumber = 2;//表头有几行占用 $xlsTitle = iconv('utf-8', 'gb2312', ...

  3. [js高手之路] es6系列教程 - 对象功能扩展详解

    第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...

  4. JS中的event 对象详解

    JS中的event 对象详解   JS的event对象 Event属性和方法:1. type:事件的类型,如onlick中的click:2. srcElement/target:事件源,就是发生事件的 ...

  5. Android Studio系列教程五--Gradle命令详解与导入第三方包

    Android Studio系列教程五--Gradle命令详解与导入第三方包 2015 年 01 月 05 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://s ...

  6. CSS3教程:pointer-events属性值详解 阻止穿透点击

    转:http://www.poluoluo.com/jzxy/201109/142876.html 在某个项目中,很多元素需要定位在一个地图层上面,这里就要用到很多绝对定位或者相对定位的元素,但是这样 ...

  7. 七牛云存储Python SDK使用教程 - 上传策略详解

    文 七牛云存储Python SDK使用教程 - 上传策略详解 七牛云存储 python-sdk 七牛云存储教程 jemygraw 2015年01月04日发布 推荐 1 推荐 收藏 2 收藏,2.7k  ...

  8. js中鼠标滚轮事件详解

    js中鼠标滚轮事件详解   (以下内容部分内容参考了http://adomas.org/javascript-mouse-wheel/ ) 之前js 仿Photoshop鼠标滚轮控制输入框取值中已使用 ...

  9. ext.js的mvc开发模式详解

    ext.js的mvc开发模式详解和环境配置 在JS的开发过程中,大规模的JS脚本难以组织和维护,这一直是困扰前端开发人员的头等问题.Extjs为了解决这种问题,在Extjs 4.x版本中引入了MVC开 ...

随机推荐

  1. Python 学习之路 (前言)

    为什么要学Python  1,脚本语言本身很方便简洁,未来会有趋势 2,web 方向 3,运维方向 我是学静态语言出身的,java,毕业后从事android 应用开发,曾在工作期间学习过linux,想 ...

  2. Sql Server系列:触发器

    触发器的一些常见用途: ◊ 强制参照完整性 ◊ 常见审计跟踪(Audit Trails):这意味着写出的记录不仅跟踪大多数当前的数据,还包括对每个记录进行实际修改的历史数据. ◊ 创建与CHECK约束 ...

  3. Codeforces Round #323 (Div. 2) C.GCD Table

    C. GCD Table The GCD table G of size n × n for an array of positive integers a of length n is define ...

  4. 写在最前面 - 每天5分钟玩转 OpenStack(1)

    <每天5分钟玩转 OpenStack>是一个 OpenStack 教程,这是第 1 篇. 这个教程有下面两个特点: 系统讲解 OpenStack 从架构到各个组件:从整体到细节逐一讨论 重 ...

  5. Python标准库14 数据库 (sqlite3)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python自带一个轻量级的关系型数据库SQLite.这一数据库使用SQL语言.S ...

  6. Icinga使用总结

    1. 在定义命令的时候,往往需要修改commands.cfg配置文件,如果使用NPRE插件监控远程服务器,其实,定义命令也没这么复杂 commands.cfg中有关check_nrpe的命令定义如下: ...

  7. ASP.NET MVC 混搭 ASP.NET WebForms 所导致的 Html.ActionLink/BeginForm 问题

    首先,需要了解下这篇博文:<ASP.NET WebForms MapPageRoute 路由配置> 之前,在 ASP.NET MVC 中混搭 ASP.NET WebForms,使用 Map ...

  8. hibernate笔记--双向一对多映射方法

    前两节写了两个例子,分别是单向多对一的映射和单向一对多的映射,这一节继续以这个例子讲一下双向一对多的映射方法,如下图所示: 很多时候,我们既想从一对端获取多对端的信息,又想从多对端获取一对端的数据,这 ...

  9. HTML5 视频(一)

    HTML5 提供了展示视频的标准 今天,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定了一种通过 video 元素来包含视频的标准方法. 一 ...

  10. DotNet常用排序算法总结

    数据结构和算法对一个程序来说是至关重要的,现在介绍一下几种算法,在项目中较为常用的算法有:冒泡排序,简单选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等7中算法. 现在介绍选择排序算法, ...