我有这个代码,在点击事件上我重绘一个形状。现在有了多个形状之后,我想确定它们在画布上的位置。即哪个形状最左边。 这是代码。
<!DOCTYPE html>
<html>
<head>
<style>
body {
margin: 1px;
}
</style>
</head>
<body>
<div id="container"></div>
<div id="buttons">
<input type="button" id="Draw_rect" value="Click Me!">
</div>
<script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v4.7.2.min.js"></script>
<script>
window.onload = function()
{
var boxes = new Array(); //This would store the rectangles.
var boxLength = boxes.length; // this tracks the space in the array to access
// declare the stage (scene)
var stage = new Kinetic.Stage
({
container: "container",
width: 578,
height: 400
});
// declare the shape and layer objects
var shapesLayer = new Kinetic.Layer();
// initialise only the shape layer
stage.add(shapesLayer);
document.getElementById("Draw_rect").addEventListener("click", function ()
{
// create the new box object
boxes[boxLength] = new Kinetic.Rect({
x: 100,
y: 110,
width: 30,
height: 30,
fontSize: 26,
fontFamily: 'Calibri',
text: 'fx',
fill: 'black',
padding: 10,
strokeWidth: 2,
draggable: true
});
boxLength = boxes.length; // update the array index
for( var i = 0; i < boxes.length; i++) // loop through the array ensure everything is added to the shapes layer and that they are all visible
{
shapesLayer.add(boxes[i]);
boxes[i].show();
}
// redraw the shape after you have updated its properties
shapesLayer.draw();
}, false);
};
</script>
</body>
答案 0 :(得分:0)
您可以在每个方框上收听dragmove
个事件,然后比较每个方框的x坐标以确定最左边的位置。
以下是示例代码和演示:http://jsfiddle.net/m1erickson/2Lg48/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Prototype</title>
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v5.0.1.min.js"></script>
<style>
body{padding:20px;}
#container{
border:solid 1px #ccc;
margin-top: 10px;
width:350px;
height:350px;
}
</style>
<script>
$(function(){
$results=$("#results");
var stage = new Kinetic.Stage({
container: 'container',
width: 350,
height: 350
});
// declare the shape and layer objects
var shapesLayer = new Kinetic.Layer();
stage.add(shapesLayer);
var boxes=[]; //This would store the rectangles.
// 3 test boxes
boxes.push(addBox(100,30,"red"));
boxes.push(addBox(120,60,"green"));
boxes.push(addBox(140,90,"blue"));
function addBox(x,y,color){
// create a new Kinetic.Rect
var box=new Kinetic.Rect({
x:x,
y:y,
width:20,
height:20,
draggable:true,
fill:color,
stroke:"black",
strokeWidth:2,
});
// when this box is moved
// determine which box is leftmost on the stage
box.on('dragmove',function(){
// create variables to hold the leftmost position
var left=1000000;
var leftmostBoxIndex=-1;
// loop thru each box and see which one is leftmost
for(var i=0;i<boxes.length;i++){
if(boxes[i].x()<left){
leftmostBoxIndex=i;
left=boxes[i].x();
}
}
// report the color & x-coordinate of the leftmost box
var leftBox=boxes[leftmostBoxIndex];
$results.text(leftBox.fill()+" box is leftmost at x="+leftBox.x());
});
// add this box to the layer, draw the layer
// & return a reference to the newly created box
shapesLayer.add(box);
shapesLayer.draw();
return(box);
}
}); // end $(function(){});
</script>
</head>
<body>
<h4 id="results">Drag each box. Leftmost will be calculated.</h4>
<div id="container"></div>
</body>
</html>