gpt4 book ai didi

html - 拖动时的 KineticJS 图层索引

转载 作者:搜寻专家 更新时间:2023-10-31 08:47:33 25 4
gpt4 key购买 nike

所以我的问题似乎是可拖动对象总是绘制在其他对象之上。

查看我的 fiddle .

和我的代码:

    <!DOCTYPE HTML>
<html>
<head>
<style>
body {
margin: 0px;
padding: 0px;
}
canvas {
border: 1px solid #9C9898;
}
</style>
<script src="http://www.html5canvastutorials.com/libraries/kinetic-v4.3.1-beta.js"></script>
<script>
window.onload = function() {

var stage = new Kinetic.Stage({
container: 'container',
width: 578,
height: 200
});

var cableLayer = new Kinetic.Layer();


// build cable
var cable = new Kinetic.Line({
strokeWidth: 40,
stroke: 'green',
points: [{
x: stage.getWidth() / 2,
y: stage.getHeight() / 2
}, {
x: 100,
y: 100
}],
draggable: true
});

// build center

var c1 = new Kinetic.Circle({
radius: 60,
fill: 'black',
draggable: true,
x: stage.getWidth() / 2,
y: stage.getHeight() / 2
});



var c2 = new Kinetic.Circle({
x: 100,
y: 100,
radius: 60,
fill: 'black',
draggable: true,
});

//add everything to the layer


cableLayer.add(cable);
cableLayer.add(c1);
cableLayer.add(c2);




//add all to stage
stage.add(cableLayer);



//What to do when something is changed...

cable.on('dragmove', (function () {
c1.setPosition([cable.getPosition().x + cable.getPoints()[0].x, cable.getPosition().y + cable.getPoints()[0].y]);
c2.setPosition([cable.getPosition().x + cable.getPoints()[1].x, cable.getPosition().y + cable.getPoints()[1].y]);

cableLayer.draw();

}));

c1.on('dragstart', (function () {
c1.getLayer().afterDraw(function () {
cable.attrs.points[0].x = c1.getX()-cable.getX();
cable.attrs.points[0].y = c1.getY()-cable.getY();
cableLayer.draw();

});
}));

c2.on('dragstart', (function () {
c2.getLayer().afterDraw(function () {
cable.attrs.points[1].x = c2.getX()-cable.getX();
cable.attrs.points[1].y = c2.getY()-cable.getY();
cableLayer.draw();
});
}));


}
</script>
</head>
<body onmousedown="return false;">
<div id="container"></div>
</body>
</html>

所以,我尝试使用

设置索引
 cable.on('dragmove', (function () {
c1.setPosition([cable.getPosition().x + cable.getPoints()[0].x, cable.getPosition().y + cable.getPoints()[0].y]);
c2.setPosition([cable.getPosition().x + cable.getPoints()[1].x, cable.getPosition().y + cable.getPoints()[1].y]);
c2.setIndex(1);
c1.setIndex(1);
cable.setIndex(2);
cableLayer.draw();

}));

好像不行?为什么是这样?如何让圆圈在所有情况下都画在线上?主要是你拖线的情况。

我是否在其他地方设置了不同的地方?

谢谢你的帮助

最佳答案

http://jsfiddle.net/nYHrg/3/

所以问题是 kineticjs (4.3.0) 添加了一个新的“拖动”层来提高拖动性能。任何时候你拖动一个对象,它都会被放入拖动层,当你停止拖动时,它会被放回它自己的层。这不会保留您的原始 z-index。任何时候您创建一个新对象并且想要覆盖此功能时,您都必须将对象的属性之一设置为:

 "dragOnTop: false"

具体实现请参见 jsfiddle。

关于html - 拖动时的 KineticJS 图层索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14493567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com