最近在改造一个现有的层级菜单(popup实现)功能,本想利用各菜单项的鼠标移入和移出时间设置标志位,来判断当鼠标移出整个菜单时,将菜单整体隐藏。
很想当然的认为,从一个菜单项A移到另一个菜单项B,肯定是先触发A的onmouseout,再触发B的onmouseover,可试验结果表明,没有这么简单。
当鼠标在同一层级的菜单内(同一个popup内)移动时,我的推断是正确的。但当鼠标在不同层级内移动时,事件的触发却没有固定的先后关系。
以慢速移动鼠标,一切正常。但快速移动鼠标时,问题来了。当速度快到一定程度,先被触发有可能会变成B的onmouseover时间,整个顺序反过来了。
为说明情况,写了一段实例代码。
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" />
< title > 无标题文档 </ title >
< script language ="javascript" > ...
var popup = window.createPopup( );
var bod = popup.document.body;
bod.innerHTML = "<table width='100%' height='100%' bgcolor='#999999'><tr οnmοuseοver='top.status=""' οnmοuseοut='top.status+=" pop:out"'><td valign=top>pop</td></tr></table>";
popup.show(200, 200, 100, 100, document.body);
var subPopup = popup.document.parentWindow.createPopup( );
var subBod = subPopup.document.body;
subBod.innerHTML = "<table width='100%' height='100%' bgcolor='#cccccc'><tr οnmοuseοver='top.status+=" sub:in"'><td valign=top>sub</td></tr></table>";
subPopup.show(100, 0, 100, 100, bod);
</ script >
</ head >
< p > </ p >
< p > </ p >
< p > </ p >
< p > </ p >
< p > </ p >
< p > </ p >
< p > 鼠标从pop移动到sub,移动速度不同时,onmouseover和onmouseout触发的先后顺序不同。具体触发顺序见IE状态栏。 </ p >
< p > 慢:onmouseover - > onmouseout </ p >
< p > 快:onmouseout - > onmouseover </ p >
</ body >
</ html >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< meta http-equiv ="Content-Type" content ="text/html; charset=gb2312" />
< title > 无标题文档 </ title >
< script language ="javascript" > ...
var popup = window.createPopup( );
var bod = popup.document.body;
bod.innerHTML = "<table width='100%' height='100%' bgcolor='#999999'><tr οnmοuseοver='top.status=""' οnmοuseοut='top.status+=" pop:out"'><td valign=top>pop</td></tr></table>";
popup.show(200, 200, 100, 100, document.body);
var subPopup = popup.document.parentWindow.createPopup( );
var subBod = subPopup.document.body;
subBod.innerHTML = "<table width='100%' height='100%' bgcolor='#cccccc'><tr οnmοuseοver='top.status+=" sub:in"'><td valign=top>sub</td></tr></table>";
subPopup.show(100, 0, 100, 100, bod);
</ script >
</ head >
< p > </ p >
< p > </ p >
< p > </ p >
< p > </ p >
< p > </ p >
< p > </ p >
< p > 鼠标从pop移动到sub,移动速度不同时,onmouseover和onmouseout触发的先后顺序不同。具体触发顺序见IE状态栏。 </ p >
< p > 慢:onmouseover - > onmouseout </ p >
< p > 快:onmouseout - > onmouseover </ p >
</ body >
</ html >
问题尚未找到解决方法,准备暂时采取判断鼠标位置的方法来控制菜单的隐藏显示,但这样效率太低。继续研究中。