我使用KinectJS绘制基于鼠标的移动线。 当用户按住鼠标按钮,我想这是该行的“开始”点,而当用户释放,这将是该行的“结束”,但因为它们是按住鼠标下来,我想要能够动态地重绘线作为我的鼠标移动。 这可能吗?
Answer 1:
是的,它可能。
基本上,你拥有的OnMouseMove事件中重绘图层。 你需要一个标志时,该线移动或不控制。
当脚本初始化,这个标志应该是假的。
在onmousedown事件,该行开始应该接受当前的鼠标坐标和标志设置为true。
在onMouseMouve,如果标志是真实的,你应该更新行端接收当前鼠标的坐标。
在onMouseUp,标志应当设置为false。
看下面的例子:
<!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.0.1.js"></script>
<script>
window.onload = function() {
layer = new Kinetic.Layer();
stage = new Kinetic.Stage({
container: "container",
width: 320,
height: 320
});
background = new Kinetic.Rect({
x: 0,
y: 0,
width: stage.getWidth(),
height: stage.getHeight(),
fill: "white"
});
line = new Kinetic.Line({
points: [0, 0, 50, 50],
stroke: "red"
});
layer.add(background);
layer.add(line);
stage.add(layer);
moving = false;
stage.on("mousedown", function(){
if (moving){
moving = false;layer.draw();
} else {
var mousePos = stage.getMousePosition();
//start point and end point are the same
line.getPoints()[0].x = mousePos.x;
line.getPoints()[0].y = mousePos.y;
line.getPoints()[1].x = mousePos.x;
line.getPoints()[1].y = mousePos.y;
moving = true;
layer.drawScene();
}
});
stage.on("mousemove", function(){
if (moving) {
var mousePos = stage.getMousePosition();
var x = mousePos.x;
var y = mousePos.y;
line.getPoints()[1].x = mousePos.x;
line.getPoints()[1].y = mousePos.y;
moving = true;
layer.drawScene();
}
});
stage.on("mouseup", function(){
moving = false;
});
};
</script>
</head>
<body>
<div id="container" ></div>
</body>
</html>
文章来源: KineticJS - Drawing Lines with Mouse