当我快速移动鼠标时,我正在使用JavaScript mouseover和mouseout事件,但不会触发该事件.你能告诉我问题是什么吗?
请让我知道如何解决此问题.还请告知我是否还有其他需要.
这是代码
的HTML
4 => qq[
<ul id="primary">
<li id="firstTab" onm ouseover="changeSecondaryMenu('index','explore');" onm ouseout="changeSecondaryMenu('explore');"><a></a></li>
<li id="secondTab" onm ouseover="changeSecondaryMenu('home','explore');" onm ouseout="changeSecondaryMenu('explore');"><a></a></li>
<li id="thirdTab" onm ouseover="changeSecondaryMenu('requests','explore');" onm ouseout="changeSecondaryMenu('explore');"><a></a></li>
<li onm ouseover="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" onm ouseover="cancelTimeOut();" onm ouseout="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>
],
的JavaScript
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");
}
解决方法:
这取决于. Javascript不会尝试在“框架”之间进行插补.意思是,是的,如果您足够快地移动鼠标,则一个mousemove事件将在对象的一侧触发,而下一个mousemove事件将在另一侧触发,因此mouseover和out永远不会被触发,您再明智不过了.
如果捕获这些事件绝对重要,那么您将不得不自己做一些工作.您可以自己加入mousemove,并针对每个事件触发,比较上一次触发和当前触发期间鼠标的位置.您需要在此处做一些几何处理,但是如果由两点创建的线碰到了所讨论对象的边界框(要么根据每个边进行4个比较,要么根据通过该框的X进行2个比较) ),然后手动触发鼠标悬停.然后将鼠标移出.