私は、影響を受けた歯車がアニメーション化(回転)し始めるマウスオーバーイベントで、ランダムに画像(歯車)が追加されたキャンバスでアニメーションヘッダをコーディングしようとしていました。私はそれをするのに苦労している。私は本当にこれに多くの時間を無駄にし、ここで助けを得ることに決めました。キャンバスフレームは1つの大きなオブジェクトと見なされるため、単一のキャンバスオブジェクトに対して「イベントリスナー」がないことを読んだので、ここでキャンバスを使用することもOKですか?だから、それは "不可能"または単一のcogwheelsアニメーションをアニメ化するために効率的ではないかもしれません...これを解決するための良いチュートリアルや、私は聞く/少なくとも最初に読むべきいくつかのヒント?ウェブページのアニメーションヘッダをコーディングする最も効率的な方法は何ですか?
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
var cw=canvas.width;
var ch=canvas.height;
var imageURLs=[];
imageURLs.push("https://image.freepik.com/free-icon/cogwheel_318-102625.png");
imageURLs.push("https://image.freepik.com/free-icon/cogwheel_318-102625.png");
imageURLs.push("https://image.freepik.com/free-icon/cogwheel_318-102625.png");
imageURLs.push("https://image.freepik.com/free-icon/cogwheel_318-102625.png");
imageURLs.push("https://image.freepik.com/free-icon/cogwheel_318-102625.png");
imageURLs.push("https://image.freepik.com/free-icon/cogwheel_318-102625.png");
//the loaded images will be placed in imgs[]
var imgs=[];
var imagesOK=0;
loadAllImages(start);
function loadAllImages(callback){
for (var i=0; i<imageURLs.length; i++) {
var img = new Image();
imgs.push(img);
img.onload = function(){
imagesOK++;
if (imagesOK>=imageURLs.length) {
callback();
}
};
img.onerror=function(){alert("image load failed");}
img.crossOrigin="anonymous";
img.src = imageURLs[i];
}
}
function start(){
// the imgs[] array now holds fully loaded images
// the imgs[] are in the same order as imageURLs[]
for(var i=0;i<imgs.length;i++){
var randomX=Math.min(cw-imgs[i].width,Math.random()*cw);
var randomY=Math.min(ch-imgs[i].height,Math.random()*ch);
ctx.drawImage(imgs[i],randomX,randomY);
}
}
私はこの上の専門家ではないが、あなたが実際にcanvas要素にイベントリスナーを添付することができるように思われます。 [このリンク](http://www.homeandlearn.co.uk/JS/html5_canvas_mouse_events.html)をご覧ください。 – alex