[英]HTML5 Canvas : How do I merge 2 canvas into 1 (of which 1 is draggable)
[英]How do I interchange function doMouseDown() in HTML5 canvas
我正在嘗試使用HTML5畫布創建繪畫游戲。
我希望第一個按鈕調用單擊畫布時畫線的函數。 我希望第二個按鈕調用單擊畫布時繪制圓的函數。
如果可以弄清楚如何互換“ function doMouseDown()”,則可以從那里構建游戲。
它對我不起作用。
這是我的一些代碼:
<head>
<meta charset="UTF-8">
<title>Home</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<style>
canvas
{
border: 2px solid black;
}
</style>
<script>
// the setup canvas function runs when the document is loaded.
var context;
function setupCanvas()
{
function initialise() {
var canvas =document.getElementById("myCanvas");
context = canvas.getContext("2d");
canvas.addEventListener("mousedown", doMouseDown, true);
var coordinateX;
var coordinateY;
}
function doMouseDown(event)
{
coordinateX= event.pageX;
coordinateY= event.pageY;
context.fillRect(coordinateX, coordinateY, 100, 100);
context.strokeRect(coordinateX, coordinateY, 100, 100);
}
function doMouseDown(event2)
{
coordinateX= event.pageX;
coordinateY= event.pageY;
context.beginPath();
context.arc(coordinateX, coordinateY, 150, 0, Math.PI, false);
context.stroke();
}
</script>
</head>
<body onload = "setupCanvas(); initialise()">
<canvas id="myCanvas" height='400' width='400'>
</canvas>
<p>
<input type="button" onclick="doMouseDown(event);" value="Line">
<input type="button" onclick="doMouseDown(event2);" value="Circle">
</p>
您正在將畫布上的事件偵聽器與按鈕上的事件偵聽器混合在一起。 例如,您可以將HTML更改為:
<input type="button" onclick="setTool('line');" value="Line">
<input type="button" onclick="setTool('circle');" value="Circle">
然后使用以下JS:
var tool; // global variable
function setTool(t) {
tool = t;
}
// Your setup/init code
還為繪圖功能使用不同的名稱:
function drawLine(event)
{
coordinateX= event.pageX;
coordinateY= event.pageY;
context.fillRect(coordinateX, coordinateY, 100, 100);
context.strokeRect(coordinateX, coordinateY, 100, 100);
}
function drawCircle(event)
{
coordinateX= event.pageX;
coordinateY= event.pageY;
context.beginPath();
context.arc(coordinateX, coordinateY, 150, 0, Math.PI, false);
context.stroke();
}
最后,創建畫布事件處理程序:
function doMouseDown(event) {
if(tool == 'line') {
return drawLine(event);
} else if(tool == 'circle') {
return drawCircle(event);
}
}
一種選擇是根據模式更改事件監聽器,
function enableLineMode(event)
{
var canvas =document.getElementById("myCanvas");
canvas.removeEventListener("mousedown", drawLine);
canvas.removeEventListener("mousedown", drawCircle);
canvas.addEventListener("mousedown", drawLine, true);
}
function enableCircleMode(event2)
{
var canvas =document.getElementById("myCanvas");
canvas.removeEventListener("mousedown", drawLine);
canvas.removeEventListener("mousedown", drawCircle);
canvas.addEventListener("mousedown", drawCircle, true);
}
function drawLine(event)
{
coordinateX= event.pageX;
coordinateY= event.pageY;
context.fillRect(coordinateX, coordinateY, 100, 100);
context.strokeRect(coordinateX, coordinateY, 100, 100);
}
function drawCircle(event)
{
coordinateX= event.pageX;
coordinateY= event.pageY;
context.beginPath();
context.arc(coordinateX, coordinateY, 150, 0, Math.PI, false);
context.stroke();
}
HTML更改
<input type="button" onclick="enableLineMode();" value="Line">
<input type="button" onclick="enableCircleMode();" value="Circle">
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.