我正在尝试使用konva.js创建一个舞台。基本上,我需要添加两个(至少)或更多的图像在舞台上的基础上一些布局。
示例:
我有一个布局,分裂舞台面积垂直成两个类似的群体。每个组有一个图像。
示例代码:
var stage = new Konva.Stage({
container: 'container',
width: width, // 295px
height: height, // 600px
});
var layer = new Konva.Layer({
imageSmoothingEnabled: true
});
// add a vertical line in order to show seperated groups
var line = new Konva.Line({
points: [stage.width() / 2, 0, stage.width() / 2, stage.height()],
stroke: '#9499a3',
strokeWidth: 2,
lineCap: 'round',
lineJoin: 'round',
});
layer.add(line)
// create group #1
var group1 = new Konva.Group({
x: 0,
y: 0,
width: stage.width() / 2,
height: stage.height()
});
var image1;
var imageObj = new Image();
imageObj.onload = function () {
image1 = new Konva.Image({
x: (stage.width() / 2 - imageObj.width) - line.strokeWidth() / 2,
//y: 0,
width: imageObj.width,
height: stage.height(),
image: imageObj,
draggable: true,
});
//layer.add(image1);
group1.add(image1);
image1.on('dragstart', function () {
console.log('dragstart')
});
image1.on('dragmove', function(e){
console.log('X : ' + this.attrs.x + ', Y : ' + this.attrs.y)
});
image1.on('dragend', function () {
console.log('X : ' + this.attrs.x + ', Y : ' + this.attrs.y)
});
};
imageObj.src = 'img/1.jpg';
// create group #2
var group2 = new Konva.Group({
x: stage.width() / 2 + line.strokeWidth() / 2,
y: 0,
width: stage.width() / 2,
height: stage.height()
});
var image2;
var imageObj = new Image();
imageObj.onload = function () {
image2 = new Konva.Image({
//x: stage.width() / 2 + line.strokeWidth() / 2,
//y: stage.height() / 2 - imageObj.height / 2,
width: imageObj.width,
height: stage.height(),
image: imageObj,
draggable: true,
});
//layer.add(image2);
group2.add(image2);
};
imageObj.src = 'img/2.jpg';
layer.add(group1, group2)
stage.add(layer);
我想做的事:
- 定义每个图像(或组)的可拖动区域,以便彼此之间不溢出。
- 检查层是否可见,以便重新定位图像以隐藏层。
1条答案
按热度按时间lnlaulya1#
因此,实现这一点的方法是使用一个rect来定义图像将被约束的帧。将其放入一个组中,并设置组的剪辑区域以匹配帧矩形的位置和大小。现在将图像添加到组中。只有组中的图像部分可见。
额外的好处是,如果您将dragBoundFunc添加到组中,则可以确保无法将过大的图像拖动到帧边缘之外。
请参阅下面的片段(最好全屏运行)和可编辑的CodePen here。
当然,这只是一个图像帧,您已经描述了在您的用例中将有两个图像帧。我建议你解开代码,然后创建一个类,然后你可以根据需要使用尽可能多的类,等等。
有一个关于here的博客条目。