Событие мыши 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 через поле), затем вручную наведите указатель мыши. И затем мышь.