【发布时间】:2017-04-27 16:28:10
【问题描述】:
下面是一个脚本,它定义了两个函数,分别绘制 4 个矩形按钮和 1 个圆形按钮。我正在尝试在按钮中实现特定的悬停和单击功能(如脚本警报中所述),但我对如何执行此操作有点茫然。我尝试在每次单击时调用 makeInteractiveButton() 函数,但这会导致很多奇怪的重叠和滞后。我希望脚本执行以下操作:
如果圆形按钮悬停,我希望它的 fillColour 更改,如果单击它,我希望它再次更改为代码中描述的颜色(#FFC77E 用于悬停,#FFDDB0 用于单击)。这应该仅在悬停或点击期间发生。
HTML:
<html lang="en">
<body>
<canvas id="game" width = "750" height = "500"></canvas>
<script type='text/javascript' src='stack.js'></script>
</body>
</html>
JavaScript:
var c=document.getElementById('game'),
canvasX=c.offsetLeft,
canvasY=c.offsetTop,
ctx=c.getContext('2d')
elements = [];
c.style.background = 'grey';
function makeInteractiveButton(x, strokeColor, fillColor) {
ctx.strokeStyle=strokeColor;
ctx.fillStyle=fillColor;
ctx.beginPath();
ctx.lineWidth=6;
ctx.arc(x, 475, 20, 0, 2*Math.PI);
ctx.closePath();
ctx.stroke();
ctx.fill();
elements.push({
arcX: x,
arcY: 475,
arcRadius: 20
});
}
b1 = makeInteractiveButton(235, '#FFFCF8', '#FFB85D');
c.addEventListener('mousemove', function(event) {
x=event.pageX-canvasX; // cursor location
y=event.pageY-canvasY;
elements.forEach(function(element) {
if (x > element.left && x < element.left + element.width &&
y > element.top && y < element.top + element.height) { // if cursor in rect
alert('Rectangle should undergo 5 degree rotation and 105% scale');
}
else if (Math.pow(x-element.arcX, 2) + Math.pow(y-element.arcY, 2) <
Math.pow(element.arcRadius, 2)) { // if cursor in circle
alert('Set b1 fillColour to #FFC77E.');
}
});
}, false);
c.addEventListener('click', function(event) {
x=event.pageX-canvasX; // cursor location
y=event.pageY-canvasY;
elements.forEach(function(element) {
if (x > element.left && x < element.left + element.width &&
y > element.top && y < element.top + element.height) { // if rect clicked
alert('Move all cards to centre simultaneously.');
}
else if (Math.pow(x-element.arcX, 2) + Math.pow(y-element.arcY, 2) <
Math.pow(element.arcRadius, 2)) { // if circle clicked
alert('Set b1 fillColour to #FFDDB0.');
}
});
}, false);
【问题讨论】:
-
这篇文章听起来更像是一个编程作业,而不是一个问题。你能解释一下这段代码在做什么吗?到目前为止有多少工作?你现在有什么问题?
-
如果你在制作游戏(我猜是 id),你可以看看 pixi.js。他们在这里有一个带有 png 和画布的按钮示例:pixijs.github.io/examples/#/demos/interactivity.js
-
我已经把这个问题变成了一个单一的问题,让它听起来不像是一个编程任务。我正在制作一个游戏,但我希望在没有外部库的情况下做所有事情。
标签: javascript html canvas hover click