Событие мыши в JavaScript не фиксируется должным образом, когда мышь перемещается очень быстро - PullRequest
3 голосов
/ 08 апреля 2010

Я использую JavaScript mouseover и mouseout events, когда я очень быстро перемещаю мышь, события не запускаются.Можете ли вы сказать мне, в чем проблема?

Пожалуйста, дайте мне знать, как решить эту проблему.Также дайте мне знать, если что-то еще нужно.

Вот код

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 Ответ

5 голосов
/ 08 апреля 2010

Это зависит.Javascript не будет пытаться интерполировать между «кадрами».Это означает, что да, если вы двигаете мышь достаточно быстро, одно событие перемещения мыши будет срабатывать с одной стороны вашего объекта, а следующее перемещение мыши будет запускаться с другой стороны, поэтому при наведении курсора мыши никогда не срабатывает, и вы не мудрее.

Если вам абсолютно необходимо запечатлеть эти события, вам придется немного поработать самостоятельно.Вы можете подключиться к движению мыши, и для каждого события пожара сравнить положение мыши во время последнего пожара и текущий огонь.Здесь вам нужно сделать небольшую геометрию, но если линия, созданная двумя точками, попадает в ограничивающий прямоугольник рассматриваемого объекта (либо 4 сравниваются на основе каждой из сторон, либо 2 сравнивают на основе X через прямоугольник), затем вручную запустить наведение мыши.А потом мышка.

...