Ich habe mal dies ausgearbeitet:
<canvas id="canvas3" width="500" height="400"></canvas>
<script>
var bgColor = '#B5EC9B', textColor = 'black',
borderWidth = 2, borderColor = 'black';
function drawPlusMinus(cv, x, y, h, content, nr) {
var xcenter = x + h / 2, ycenter = y + h / 2;
var w = h;
cv.drawRect({
layer: true,
name: 'c' + content + nr,
strokeStyle: borderColor, strokeWidth: borderWidth,
fillStyle: bgColor,
x: xcenter, y: ycenter,
width: w, height: h,
fromCenter: true,
click: function () {
var textval = cv.getLayer('textvalue' + nr);
var val = parseInt(textval.text);
console.log(val);
if (content == '+') {
val++;
} else if (val > 0) {
val--;
}
cv.setLayer('textvalue' + nr, {
text: val
}).drawLayers();
}
}).drawText({
layer: true,
name: 'text' + content + nr,
align: 'center',
fillStyle: textColor,
x: xcenter, y: ycenter,
fontSize: 20,
fontFamily: 'Verdana, sans-serif',
text: content,
fromCenter: true
});
}
function drawGroup(cv, x, y, h, w, nr) {
var xcenter1 = x + w / 2, ycenter1 = y + h / 2;
cv.drawRect({
layer: true,
name: 'cvalue' + nr,
strokeStyle: borderColor, strokeWidth: borderWidth,
fillStyle: bgColor,
x: xcenter1, y: ycenter1,
width: w, height: h,
fromCenter: true
}).drawText({
layer: true,
name: 'textvalue' + nr,
align: 'center',
fillStyle: textColor,
x: xcenter1, y: ycenter1,
fontSize: 20,
fontFamily: 'Verdana, sans-serif',
text: nr,
fromCenter: true
});
drawPlusMinus(cv, x + w, y, h / 2, '+', nr);
drawPlusMinus(cv, x + w, y + h / 2, h / 2, '-', nr);
}
for (let i = 0; i < 3; i += 1) {
drawGroup($('#canvas3'), 120 + i * 120, 100, 60, 60, i + 1);
}
</script>
Alles anzeigen
Ich habe den einzelnen Elementen Namen mit Nummer gegeben: name: 'textvalue' + nr Dies ist jeweils der linke Layer, der den aktuellen Wert enthält.
Mit
var textval = cv.getLayer('textvalue' + nr);
var val = parseInt(textval.text);
kann ich dann im Clickhandler diesen Layer ermitteln und den Wert herausholen.
Auf die gleiche Weise kannst Du auch den Wert irgend wo anders im Skript herausholen. Um das zu vereinfachen, kann es jedoch angebracht sein, die Werte parallel in einem Array zu führen.