当我非常快速地移动鼠标而未触发事件时,我正在使用JavaScript mouseover和mouseout事件。你能告诉我这是什么问题吗?
请让我知道如何解决这个问题。如果还有其他需要,请告诉我。
这是代码
4 => qq[
<ul id="primary">
<li id="firstTab" onmouseover="changeSecondaryMenu('index','explore');" onmouseout="changeSecondaryMenu('explore');"><a></a></li>
<li id="secondTab" onmouseover="changeSecondaryMenu('home','explore');" onmouseout="changeSecondaryMenu('explore');"><a></a></li>
<li id="thirdTab" onmouseover="changeSecondaryMenu('requests','explore');" onmouseout="changeSecondaryMenu('explore');"><a></a></li>
<li onmouseover="changeSecondaryMenu('explore','explore');"><a class="current" href="contact.pl">About Site</a></li>
</ul>
],
);
my $primary_menu = $primary_menu{$primary_index};
my %secondary_menu = (
1 => qq[
<ul id="secondary" onmouseover="cancelTimeOut();" onmouseout="resetTab(event);">
<li> <a>Summary</a> </li>
<li> <a>Updates</a> </li>
<li> <a>History</a> </li>
<li> <a>News/Stats</a> </li>
<li> <a>Gratitude & Good Life</a> </li>
</ul>
],
function cancelTimeOut(){
clearTimeout(timer);
}
function resetTab(evt){
var evt = evt || window.event; // event object
var target = evt.target || window.event.srcElement; // event target
var targetID = target.getAttribute("id");
if (targetID == "secondary") {
clearTimeout(timer);
if(currentTab !=null){
document.getElementById("secondary").innerHTML = tabs[currentTab];
Rounded("ul#secondary","tr","#FFFFFF","transparent","smooth");
}
}
}
function changeSecondaryMenu(tab,selectedTab) {
currentTab = selectedTab;
clearTimeout(timer);
document.getElementById("secondary").innerHTML = tabs[tab];
Rounded("ul#secondary","tr","#FFFFFF","transparent","smooth");
}
答案 0 :(得分:5)
这取决于。 Javascript不会尝试在“框架”之间进行插值。意思是,是的,如果你移动你的鼠标足够快,一个mousemove事件将在你的对象的一侧触发,而下一个mousemove将在另一侧触发,因此mouseover和out永远不会被触发,你也不会更聪明。
如果您捕获这些事件绝对至关重要,那么您将不得不自己做一些工作。您可以自己挂钩移动鼠标,并且对于每个事件触发,比较上次触发时鼠标的位置和当前的火焰。你需要在这里做一个小几何,但是如果由两个点创建的线击中有问题的对象的边界框(4个基于每个边比较,或者2比较基于X通过框),然后手动触发鼠标悬停。然后是mouseout。