Javascript 确定在画布上绘制的图像的尺寸以及鼠标在图像上的时间
我的画布上有一个动画,其中有一些图像(使用Javascript 确定在画布上绘制的图像的尺寸以及鼠标在图像上的时间,javascript,jquery,html,canvas,drawimage,Javascript,Jquery,Html,Canvas,Drawimage,我的画布上有一个动画,其中有一些图像(使用drawImage()绘制)。为了简单起见,假设只有两个图像。这些图像在faux-3d空间中沿着圆形路径,有时一个图像与另一个重叠,有时第二个图像与第一个重叠。这些图像在离观看者“更近”或“更远”时也会缩放 每个图像都是具有以下(简化)代码的对象: 这些对象中的每一个都存储在一个名为slides的数组中 为了适当地重叠图像,drawObjs函数首先按照slides[i]的顺序对slides数组进行排序。从最小到最大缩放,然后从slides[0]开始绘制图
drawImage()
绘制)。为了简单起见,假设只有两个图像。这些图像在faux-3d空间中沿着圆形路径,有时一个图像与另一个重叠,有时第二个图像与第一个重叠。这些图像在离观看者“更近”或“更远”时也会缩放
每个图像都是具有以下(简化)代码的对象:
这些对象中的每一个都存储在一个名为slides
的数组中
为了适当地重叠图像,drawObjs
函数首先按照slides[i]的顺序对slides
数组进行排序。从最小到最大缩放,然后从slides[0]开始绘制图像
在$(document).ready()
上,我运行了一个init
函数,该函数将事件侦听器添加到画布中:
canvas = document.getElementById(canvas_id);
canvas.addEventListener('mousemove', mouse_handler, false);
此处理程序的目的是确定鼠标的位置以及鼠标是否在其中一张幻灯片上(这将通过jQuery修改页面上的
)
这是我的问题--我正在试图找出如何确定鼠标在任何给定的时间滑过的幻灯片。基本上,我需要代码来填充以下逻辑(很可能是在鼠标处理程序()中)
函数中):
有什么想法吗?看来我只是需要睡一觉才能弄明白这件事
我已经准备好了确定图像大小以及它在画布上的位置所需的一切
我将以下函数添加到我的幻灯片对象中
:
this.getBounds = function () {
var bounds = new Array();
bounds[0] = Math.ceil(this.xpos); // xmin
bounds[1] = bounds[0] + Math.ceil(this.imgx * this.scale); // xmax
bounds[2] = Math.ceil(this.ypos); // ymin
bounds[3] = bounds[2] + Math.ceil(this.imgy * this.scale); // ymax
return bounds;
};
然后在我的mouse\u handler
函数中,我从我调用的函数isWithinBounds()
中获取当前鼠标悬停幻灯片的索引,该函数取鼠标x和鼠标y的位置:
function isWithinBounds(mx,my) {
var index = -1;
for ( var i in slides ) {
bounds = slides[i].getBounds();
if ((mx >= bounds[0] && mx <= bounds[1]) && (my >= bounds[2] && my <= bounds[3])) {
index = i;
}
}
return index;
}
函数是带边界的(mx,my){
var指数=-1;
对于(幻灯片中的变量i){
bounds=幻灯片[i].getBounds();
如果((mx>=bounds[0]&&mx=bounds[2]&&my
this.getBounds = function () {
var bounds = new Array();
bounds[0] = Math.ceil(this.xpos); // xmin
bounds[1] = bounds[0] + Math.ceil(this.imgx * this.scale); // xmax
bounds[2] = Math.ceil(this.ypos); // ymin
bounds[3] = bounds[2] + Math.ceil(this.imgy * this.scale); // ymax
return bounds;
};
function isWithinBounds(mx,my) {
var index = -1;
for ( var i in slides ) {
bounds = slides[i].getBounds();
if ((mx >= bounds[0] && mx <= bounds[1]) && (my >= bounds[2] && my <= bounds[3])) {
index = i;
}
}
return index;
}