Событие мыши Javascript не было правильно записано, когда мышь двигалась очень быстро
Я использую JavaScript mouseover и mouseout события, когда я двигаю мышью очень быстро, события не запускаются. Можете ли вы сказать мне, в чем проблема?
Пожалуйста, дайте мне знать, как это решить. Также дайте мне знать, если что-то еще нужно.
Вот код
HTML
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>
],
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");
}
Ответы
Ответ 1
Это зависит. Javascript не будет пытаться интерполировать между "фреймами". Смысл, да, если вы быстро двигаете мышью, одно событие mousemove будет срабатывать с одной стороны вашего объекта, а следующая mousemove будет срабатывать с другой стороны, поэтому наведение и выключение никогда не загорятся, и вы не умнее.
Если абсолютно важно, чтобы вы захватили эти события, вам придется немного поработать над собой. Вы можете влезть в mousemove самостоятельно, и для каждого события огонь, сравните положение мыши во время последнего огня и текущий огонь. Вам нужно будет сделать небольшую геометрию здесь, но если линия, созданная двумя точками, попадает в ограничивающий прямоугольник объекта (либо 4 сравниваются на основе каждой из сторон, либо 2 сравниваются на основе X через поле), затем вручную наведите указатель мыши. И затем мышь.