让我们想象一下,我有一个事件处理程序函数附加到一个图像上,例如,一个onmouseover
处理程序。如果onmouseover
事件是由特定元素激发的,我不希望运行此处理程序。
更具体地说,我有一个悬停的图像,弹出一个菜单。如果鼠标移出该图像,我想关闭该菜单,除非我将鼠标移动到与该图像相邻的菜单。
在伪代码中有这样的东西:
img.mouseout = function () {
if (otherelement.onmouseover.fired) {
leave the menu as it is
}
else
{
close the menu
}
那么,我如何检查是否启动了另一个事件呢?
我会在另一个处理程序中添加一个超时和一个鼠标悬停处理程序来清除它。虽然这些元素在视觉上可能正好挨着,但添加一个小计时器更安全,因为mouseout事件可能只有一个1px的小区域,会引发难看的闪烁。
这也允许在没有闪烁的情况下快速摇动鼠标。
类似于:
var timer;
img.onmouseout = other.onmouseout = function() {
timer = setTimeout(closemenu, 100);
}
img.onmouseover = other.onmouseover = function() {
clearTimeout(timer);
}
function closemenu() {
// close it
}