当我们往 layer 中添加了多个 shape 时,调用 layer.draw 时,layer 会按照形状添加的先后顺序依次进行绘制。后面添加的在上面,最先添加的在最下面。
2、group
group 类似于 ps 中的组,当把几个形状添加到 group 时,移动或者旋转 group 时,group 中的形状会整体发生变化, 上面的三个矩形就构成了一个 group,我们把 group 的 draggable 属性设为 true,当移动 group 时,三个矩形都会发生移动。
var group = new Konva.Group({
x: 120,
y: 40,
draggable: true,
rotation: 20
var colors = ['red', 'orange', 'yellow'];
for(var i = 0; i < 3; i++) {
var box = new Konva.Rect({
x: i * 30,
y: i * 18,
width: 100,
height: 50,
name: colors[i],
fill: colors[i],
stroke: 'black',
strokeWidth: 4
group.add(box);
layer.add(group);
// 组删除:group.remove();
当使用 group 时,group 中元素的位置(x,y)是相对于 group 的位置进行定位的,而不再相对于 layer。
group 的嵌套
值得注意的是,group 中还可以嵌套 group,下面是一个 demo:
var parentGroup = new Konva.Group({
x: 180,
y: 200
var childGroup = new Konva.Group({
x: 0,
y: 10
var circle = new Konva.Circle({
x: 10,
y: 10,
radius: 20,
fill: 'green'
childGroup.add(circle);
parentGroup.add(childGroup);
layer.add(parentGroup);
3、shape的变换
我们可以借助 Konva.Transformer 来简单的对 shape 进行变换操作,Konva.Transformer其实是一类特殊的 Group。它在 Group 的基础上提供了用于对鼠标的动作进行响应的 UI。不过官网提示这一功能还在实验阶段,我们一起来看一下。
使用 transformer 可以通过以下三步:
创建一个 Transformer 实例
将这个实例加入到 layer 中
通过实例的transformer.attachTo(node)方法绑定到一个形状或者 group 上即可。
//创建一个 star
var star = new Konva.Star({
x: stage.width() / 2,
y: stage.height() / 2,
draggable: true,
numPoints: 5,
innerRadius: 20,
outerRadius: 40,
fill: 'yellow',
stroke: 'black',
strokeWidth: 4
// 创建一个 transformer
var transformer = new Konva.Transformer();
layer.add(transformer);
//将 transformer 绑定到 star 上
transformer.attachTo(star);
layer.add(star);
4、元素树结构的遍历
Konva 提供了类似于 jQuery 的 find 方法来找到你想找的元素,find 方法可以在 stage,layer,group,shape 上调用,你也可以使用 findOne 来只选择一个元素。
find方法支持的选择器如下:
// 选中所有id 为 rect 的元素
var rectangle = new Konva.Rect({x: 0, y: 0, id: 'rect', ...})
stage.find('#rect');
// 选中所有 name 为 circle 的元素
var rectangle = new Konva.Rect({x: 0, y: 0, name: 'circle', ...})
stage.find('.circle');
// 选中所有Star
stage.find('Star');
// 选中所有的Star 和 Rectangle
stage.find('Shape');
需要说明的是:这里的 id 不具有唯一性,多个元素可以具有同一个 id,且选择时会选到多个元素。