svg.js文档链接 svgjs.dev/docs/3.2/re…
在svg.js中,如果想获取一个元素,可以使用下面几种方法
1是svg函数,例如SVG('rect'),就可以返回页面中第一个rect标签的元素。而且不只局限于svg图形,普通的dom元素也可以。还有SVG.find函数,查找到的是符合条件元素的列表
2是findOne函数,这个就是在特定的范围内,例如rect,group这样,去查找第一个符合条件的元素。如过查不到的话就返回null。还有对应的find函数,查找到的是符合条件元素的列表。
如果要获取一个svg实例下有多少子元素,可以使用children()函数,会返回有svg元素组成的数组。在这个数组上还额外添加了,clear(),each(),first(),get(),has(),index(),last()方法
而如果要获取子元素的父级,一是可以使用root()函数,直接获取当前元素最上级的根节点。二是parent()函数,就可以获取该元素的直接上级一层。parents()函数则是从他最直接的上级父元素开始记录,直到根节点并组成一个数组返回回来。
在svg中可以创建引用,然后元素可以使用url来使用,例如渐变,在svg.js中就可以写成
var draw = SVG().addTo('div').size(300, 300).fill('#f06')const grad = draw.gradient('linear', function (stop) { stop.stop(0, '#000') stop.stop(1, '#fff');});var rect = draw.rect(100, 100).fill(grad)
如果现在想要反向查找的话,可以用reference
rect.reference('fill')
会返回对应的元素实例,(svg的渐变也会在dom结构中体现为一个标签)
如果要给元素添加属性,最基础的方法就是attr,可以有多种形式
rect.attr('x', 50)
rect.attr({
fill: '#f06'
, 'fill-opacity': 0.5
, stroke: '#000'
, 'stroke-width': 10
})
如果想剔除掉某一属性,就可以把他设置成null。attr还可以当作获取已经设置好的属性的函数,
var x = rect.attr('x')
var attributes = rect.attr()
var attributes = rect.attr(['x', 'y'])
对于x和y等位置类型的属性,svg.js提供了更方便的写法
rect.attr({ x: 20, y: 60 })
circle.attr({ cx: 50, cy: 40 })
rect.x(20).y(60)
circle.cx(50).cy(50)
而简化写法更关键用法在于,能设置一个元素原本不属于它的属性。例如cx和cy是设置元素中心位置,这个属性是不存在rect这样的矩形中的,所以你用attr去设置不生效。但如果用cx()和cy()函数就可以生效。
除此之外,x(), y(), cx(), cy()还可以用作获取元素位置的方法
svg.js还提供了
move(x,y) 元素左上角移动到某一个点
center(x,y) 设置元素中心点位置,与cx和cy相同
dx(), dy(), dmove(x,y), 都可以用来设置元素的相对位置
size()可以用来设置元素宽高,传两个参数是宽和高,只穿一个就是宽。同时提供了width和height来设置和获取元素的宽高
radius函数用来设置圆形的半径,椭圆的长半径和短半径,以及矩形的圆角
fill用来填充颜色,图片等,stroke设置描边,opacity设置透明度
transform用来设置平移变形等,相应的还有flip(),rotate(),skew(),scale(),translate()
css函数可以用来设置css属性,就像普通的html元素一样。会以style形式内联在元素中。css函数也可以获取元素的style属性。
此外还有hide(),show(),visible()
id函数可以用来设置和获取元素id值
addClass可以用来添加class值,classes返回元素所有的class,hasclass用来检测是否存在某个class,removeClass用来移除,toggleClass代表有则移除,无则添加
data函数允许将一段数据与元素绑定,可以同时用来获取和设置,移除时设置为null即可
remember函数与上面的data类似,可以绑定和获取,移除使用forget函数
一个元素要添加某个元素,可以使用add函数,第二个参数可以控制插入的位置,例如
draw.group().add(rect).add(circle,0)
circle在dom结构中就会排在中的第一位
addTo是将某一元素添加到其他元素下,clone是创建一个元素的副本,两者相互独立,没有直接的联系。
put和putIn与add,addTo类型,但返回值不相同。
remove移除某元素,replace函数则会在原位置上替换新的元素
toRoot和toParent则是将元素移动至根节点与某个父节点处
ungroup就像是解压缩,删除掉节点,其中的元素移动到group的父节点,或者其他位置
flatten将所有的容器元素都去除掉,其下的子元素保留
wrap函数,将一个元素用另一个包裹起来
A.after(B),将B插入到A之后,before就是之前
A.insterAfter(B),将A插入到B之后,insterBefore就是之前
back是将元素移动到末尾,而backward是向后移动一步
front是移动到前面,forward是向前一步
next和prev是获取后一个,前一个的元素,position是获取排列序号,siblings用来获取所有的兄弟元素
point函数则将屏幕中的某一点转为svg内的坐标
inside则是判断某个坐标在不在svg内
viewbox可以用来设置和获取svg元素的viewbox属性,zoom则是对viewbox进行放大和缩小,同时也可以获取
bbox和rbox可以用来获取包裹元素
更详细的信息可以查看svgjs.dev/docs/3.2/ma…