Javascriptとcanvasを使ってドラッグ&ドロップで複数のアイコンを別々に指定範囲内で動かせるようなものを作成したいです。
下記のサイトを参考にして四角形をドラッグ&ドロップで動かせるようにしました。
https://itecnote.com/tecnote/javascript-drag-and-drop-multiple-objects-in-html5-canvas/
サッカーのフォーメーションを自分で作るような仕様にしたいです。
下の画像のように四角形は並べて、自由にドラッグ&ドロップで動かせるようにしたのですが、この四角形をアイコン画像に置き換えたいです。
コードを書いてみたのですが、思ったように動かず、エラーが出ています
Javascript
1 2window.onload=function(){ 3const path = require('path'); 4console.log(path); 5const board = document.getElementById("board"); 6const ctx=board.getContext("2d"); 7const chara = new Image(); 8chara.src="/images/uni.jpg"; 9chara.onload = ()=>{ 10 ctx.drawImage(chara,0,0,100,100) 11 12var BB=board.getBoundingClientRect(); 13var offsetX=BB.left; 14var offsetY=BB.top; 15var WIDTH = board.width; 16var HEIGHT = board.height; 17var dragok = false; 18var startX; 19var startY; 20 21canvas.onmousedown = myDown; 22canvas.onmouseup = myUp; 23canvas.onmousemove = myMove; 24 25function clear() { 26ctx.clearRect(0, 0, WIDTH, HEIGHT); 27} 28 29function draw() { 30clear(); 31ctx.fillStyle = "#FAF7F8"; 32chara(0,0,WIDTH,HEIGHT); 33// redraw each rects in the rects[] array 34for(var i=0;i<charas.length;i++){ 35 var r=charas[i]; 36 ctx.fillStyle=r.fill; 37 chara(r.x,r.y,r.width,r.height); 38 console.log("い"); 39} 40} 41}; 42function myDown(e){ 43 44 45e.preventDefault(); 46e.stopPropagation(); 47 48var mx=parseInt(e.clientX-offsetX); 49var my=parseInt(e.clientY-offsetY); 50 51dragok=false; 52for(var i=0;i<charas.length;i++){ 53 var r=charas[i]; 54 if(mx>r.x && mx<r.x+r.width && my>r.y && my<r.y+r.height){ 55 56 dragok=true; 57 r.isDragging=true; 58 } 59} 60startX=mx; 61startY=my; 62} 63 64function myUp(e){ 65 66e.preventDefault(); 67e.stopPropagation(); 68 69dragok = false; 70for(var i=0;i<charas.length;i++){ 71 charas[i].isDragging=false; 72} 73} 74 75function myMove(e){ 76if (dragok){ 77 78 e.preventDefault(); 79 e.stopPropagation(); 80 81 var mx=parseInt(e.clientX-offsetX); 82 var my=parseInt(e.clientY-offsetY); 83 84 var dx=mx-startX; 85 var dy=my-startY; 86 87 for(var i=0;i<charas.length;i++){ 88 var r=charas[i]; 89 if(r.isDragging){ 90 r.x+=dx; 91 r.y+=dy; 92 } 93 } 94 95 draw(); 96 97 startX=mx; 98 startY=my; 99 100} 101} 102};
エラー内容は以下です。
uncaught ReferenceError: charas is not defined at HTMLCanvasElement.myUp(new.js:170:1)
Uncaught ReferenceError: dragok is not defined at HTMLCanvasElement.myMove (new.js:176:1)
現在はWebページにアイコン画像が一つだけ映っており、アイコンを動かそうとすると上記のエラーが出ます。
Javascriptを触り始めてから間もないため、解決方法に辿り着くまでの検索の仕方などもわかっておりません。
こちらに記載したコードのおかしな点がありましたらご教示いただけると幸いです。

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2022/06/21 11:21
2022/06/21 13:15