我想要使图像对象旋转根据鼠标点击该图像和鼠标到对象的中心的角度。kineticjs旋转鼠标角度
单位圆的思考和具有该图像被旋转大约基于其中鼠标在该圆的圆。
我现在有
var stage = new Kinetic.Stage({
container: "container",
width: 800,
height: 500,
id: "myCanvas",
name: "myCanvas"
});
var layer = new Kinetic.Layer();
//gets the canvas context
var canvas = stage.getContainer();
var mousePosX;
var mousePosY;
var mouseStartAngle;
var selectedImage;
var mouseAngle;
var mouseStartAngle;
console.log(canvas)
var shiftPressed
window.addEventListener('keydown', function (e) {
if (e.keyCode == "16") {
shiftPressed = true;
}
console.log(shiftPressed)
}, true);
window.addEventListener('keyup', function (e) {
if (e.keyCode == "16") {
shiftPressed = false;
}
console.log(shiftPressed)
}, true);
function drawImage(imageObj) {
var dynamicImg = new Kinetic.Image({
image: imageObj,
x: stage.getWidth()/2 - 200/2,
y: stage.getHeight()/2 - 137/2,
width: 100, //imageObj.width,
height: 100, // imageObj.height,
draggable: true,
offset: [50,50] //[(imageObj.width/2), (imageObj.height/2)]
});
dynamicImg.on('mousedown', function() {
selectedImage = this;
console.log("x: " + this.getX())
console.log("y: " + this.getY())
var mouseStartXFromCenter = mousePosX - (this.getX() + (this.getWidth()/2));
var mouseStartYFromCenter = mousePosY - (this.getY() + (this.getHeight()/2));
mouseStartAngle = Math.atan2(mouseStartYFromCenter, mouseStartXFromCenter);
if (shiftPressed) {
//console.log("trying to switch draggable to false");
//console.log(this)
this.setDraggable(false);
}
});
dynamicImg.on('mouseup mouseout', function() {
//console.log('mouseup mouseout')
this.setDraggable(true);
});
dynamicImg.on('mouseover', function() {
document.body.style.cursor = 'pointer';
});
dynamicImg.on('mouseout', function() {
document.body.style.cursor = 'default';
});
imageArray.push(dynamicImg);
layer.add(dynamicImg);
stage.add(layer);
}
var imageObj = new Image();
imageObj.onload = function() {
drawImage(this);
};
imageObj.src = 'http://localhost:60145/Images/orderedList8.png';
function getMousePos(evt) {
var rect = canvas.getBoundingClientRect();
return {
x: evt.clientX - rect.left,
y: evt.clientY - rect.top
};
}
canvas.addEventListener('mouseup', function() {
selectedImage = undefined;
});
canvas.addEventListener('mousemove', function (evt) {
mousePos = getMousePos(evt);
//console.log('Mouse position: ' + mousePos.x + ',' + mousePos.y)
mousePosX = mousePos.x;
mousePosY = mousePos.y;
if (selectedImage != undefined) {
mouseXFromCenter = mousePosX - selectedImage.getX();
mouseYFromCenter = mousePosY - selectedImage.getY();
mouseAngle = Math.atan2(mouseYFromCenter, mouseXFromCenter);
var rotateAngle = mouseAngle - mouseStartAngle;
selectedImage.setRotation(rotateAngle);
}
}, false);
代码有几件事情吧。 - 如果按下“shift”并且在图像上发生了mousedown事件,它应该只允许旋转。
- 它需要保持动态的图像画面,因为他们会在页面的生活动态填充画布。
这里是类似我希望发生的事情一个很好的例子,但只是简单的不能让它在画布/ kineticjs工作。 http://jsfiddle.net/22Feh/5/
你可以把你当前的代码放入jsfiddle吗? – SoluableNonagon 2013-02-18 17:11:59
我把它放在一个方形的图像上,它似乎可以在一些点击上正确旋转,但从来没有mousedown计算或'setRotation'。我不确定它是哪一个。 http://jsfiddle.net/WXHe6/ – kevindstanley 2013-02-18 18:21:49
我发布了两个答案,第二个我认为是你正在寻找的。对不起,第一个冗长的啰嗦,我分析了它。 – SoluableNonagon 2013-02-18 21:41:10