У меня есть анимация на холсте, где у меня есть несколько изображений (нарисованных с использованием drawImage()
). Для простоты, скажем, есть только два изображения. Эти изображения следуют круговой траектории в искусственном трехмерном пространстве, так что иногда одно изображение накладывается на другое, а в другое время второе изображение перекрывается с первым. Эти изображения также масштабируются при перемещении «ближе» или «дальше» от зрителя.
Каждое из этих изображений представляет собой объект со следующим (упрощенным) кодом:
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).
Вот моя проблема - я пытаюсь выяснить, как определить, на каком слайде находится мышь в любой момент времени. По сути, мне нужен код для заполнения следующей логики (скорее всего, в функции mouse_handler()
):
// if (mouse is over a slide) {
// slideName = get .name of moused-over slide;
// } else {
// slideName = "";
// }
// $("#slideName").html(slideName);
Есть мысли?