我正在尝试绘制/绘制多个圆圈,并希望在鼠标悬停或鼠标单击时使用ID识别它们。 我试图使用KineticJS来做这件事,因为我是javascript的初学者而无法实现。
除此之外,我只想捕获正常的鼠标事件(左/右键单击),除鼠标事件外,不会移动或播放这些圆圈。因此KineticJS是正确的lib。用吗?拉斐尔JS / d3等怎么样{有任何机会可以通过Jquery / Dojo轻松实现这一点) 唯一重要的是绘制大量的圆圈,能够唯一地识别它们并将鼠标事件与它们相关联。
PS:是的我也希望能够放大/缩小绘制这些圆圈的空间/画布。
请建议。提前致谢。
答案 0 :(得分:2)
尝试以下代码,您可以通过圈子上的mousemove找到圈子ID
<!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() {
var stage = new Kinetic.Stage({
container: 'container',
width: 578,
height: 200
});
var circlesLayer = new Kinetic.Layer();
var tooltipLayer = new Kinetic.Layer();
var colors = ['red', 'orange', 'yellow', 'green', 'blue', 'cyan', 'purple'];
var colorIndex = 0;
var circleId ;
for(var n = 0; n < 100; n++) {( function() {
var i = n;
var color = colors[colorIndex++];
if(colorIndex >= colors.length) {
colorIndex = 0;
}
circleId = "CircleID_" + i;
var randX = Math.random() * stage.getWidth();
var randY = Math.random() * stage.getHeight();
var circle = new Kinetic.Circle({
x: randX,
y: randY,
radius: 10,
fill: color,draggable:true,
id:circleId
});
circle.on('mousemove', function() {
// update tooltip
var mousePos = stage.getMousePosition();
tooltip.setPosition(mousePos.x + 5, mousePos.y + 5);
tooltip.setText('ID: ' + stage.get("#CircleID_" + i)[0].attrs.id);
tooltip.show();
tooltipLayer.draw();
});
circle.on('mouseout', function() {
tooltip.hide();
tooltipLayer.draw();
});
circlesLayer.add(circle);
}());
}
var tooltip = new Kinetic.Text({
text: '',
fontFamily: 'Calibri',
fontSize: 12,
padding: 5,
visible: false,
fill: 'black',
opacity: 0.75,
textFill: 'white'
});
tooltipLayer.add(tooltip);
stage.add(circlesLayer);
stage.add(tooltipLayer);
};
</script>
</head>
<body>
<div id="container"></div>
</body>
</html>