キャンバスにアニメーションがあり、いくつかの画像があります( を使用して描画drawImage()
)。簡単にするために、画像が 2 つしかないとしましょう。これらの画像は、偽の 3D 空間で円形のパスをたどっているため、ある画像が別の画像と重なる場合もあれば、2 番目の画像が最初の画像と重なる場合もあります。これらの画像は、視聴者から「近づく」または「遠ざかる」ときにもスケーリングされます。
これらの各画像は、次の (簡略化された) コードを持つオブジェクトです。
function slide_object() {
this.x = 0.0; // x = position along path (in radians)
this.xpos = 0.0; // x position on canvas
this.ypos = 0.0; // y position on canvas
this.scale = 0.0;
this.name = ""; // a string to be displayed when slide is moused over
this.imgx = 0.0; // width of original image
this.imgy = 0.0; // height of original image
this.init = function (abspath, startx, name) { // startx = path offset (in radians)
this.name = name;
this.x = (startx % (Math.PI * 2));
var slide_image = new Image();
slide_image.src = abspath;
this.img = slide_image;
calcObjPositions(0, this); // calculate's the image's position, then draws it
};
this.getDims = function () { // called by calcObjPositions when animation is started
this.imgx = this.img.width / 2;
this.imgy = this.img.height / 2;
}
}
これらの各オブジェクトは、 という配列に格納されslides
ます。
画像を適切に重ねるために、drawObjs
関数は最初に配列を最小から最大slides
の順に並べ替え、次に から始まる画像を描画します。slides[i].scale
slides[0]
キャンバスにイベント リスナーを追加$(document).ready()
する関数を実行しinit
ます。
canvas = document.getElementById(canvas_id);
canvas.addEventListener('mousemove', mouse_handler, false);
このハンドラーの目的は、マウスがどこにあるか、およびマウスがいずれかのスライドの上にあるかどうかを判断することです (これにより、<div>
jQuery を介してページ上の a が変更されます)。
ここに私の問題があります.マウスがどのスライドの上にあるかを特定する方法を見つけようとしています. 基本的に、次のロジックを埋めるコードが必要です (ほとんどの場合、mouse_handler()
関数内にあります)。
// if (mouse is over a slide) {
// slideName = get .name of moused-over slide;
// } else {
// slideName = "";
// }
// $("#slideName").html(slideName);
何かご意見は?