5

Po pierwsze przepraszam ... Zadałem to pytanie wcześniej, ale zrobiłem to źle. Mam problem z podłączeniem hoverIntent do następującego kodu JavaScript ... Potrzebuję go, aby zastąpić funkcje mouseenter i mouseleave poniżej. Dla jasności, proszę o pomoc, ponieważ nie jestem zbyt dobry w składni JavaScript. Drugi fragment kodu wygląda na to, że powinien działać, ale nie robi nic i wydaje się kompletnie martwy w Internet Explorerze.Wymiana MouseOver z .hoverIntentem

if (jQuery.browser.msie === true) { 
    jQuery('#top_mailing') 
    .bind("mouseenter",function(){ 
     $("#top_mailing_hidden").stop().slideDown('slow'); 
    }) 
    .bind("mouseleave",function(){ 
     $("#top_mailing_hidden").stop().slideUp('slow'); 
    }); 
} 

Używam poniższych dla innych przeglądarek, ale nie działa w Internet Explorer.

$('#top_mailing').hoverIntent(
    function() { 
    $("#top_mailing_hidden").stop().slideDown('slow'); 
    }, 
    function() { 
    $("#top_mailing_hidden").stop().slideUp('slow'); 
    } 
); 
+2

Czy otrzymujesz błędy JS w IE? –

+1

Właśnie testowałem hoverIntent i jQuery 1.4.1 z IE. Działa w porządku. Czy to w ogóle animuje dla ciebie? Czy działa w innych przeglądarkach? – user113716

+0

Czy przetestowałeś ten kod: $ ('# top_mailing'). HoverIntent ( function() { $ ("# top_mailing_hidden"). Stop(). SlideDown ('slow'); }, funkcja() { $ ("# top_mailing_hidden"). Stop(). SlideUp ("wolno"); } ); – Brian

Odpowiedz

3

Myślę, że znalazłem problem.

Dwa razy dzwonisz pod numer $('#top_mailing').hoverIntent(.... Raz na dole pliku hoverintent_r5.js i raz w pliku custom.js. Najwyraźniej IE tego nie lubi. Pozbądź się jednego lub drugiego i powinno być dobrze.

Prawdopodobnie lepiej zachować cały kod w swoim własnym pliku js. W przeciwnym razie łatwo o tym zapomnieć.

EDYTOWANIE: Unikanie problemu stop().

Wolę ożywione:

$('#top_mailing').hoverIntent(
    function() { 
    $("#top_mailing_hidden").stop().animate({height:150},'slow'); 
    }, 
    function() { 
    $("#top_mailing_hidden").stop().animate({height:0},'slow'); 
    } 
); 

W ten sposób, gdy trzeba zatrzymać się i zmienić kierunek, to zawsze wiem, gdzie iść. (0 i 150 w powyższym przykładzie).

Należy pamiętać, że wymagałoby to ustawienia top_mailing_hidden, aby mieć zestaw clip:auto; overflow:hidden.

Ponieważ używasz hoverIntent, nie może być potrzeby wywoływania stop(), ponieważ hoverIntent ma na celu uniknięcie niepożądanych zdarzeń mouseover.

Lekko off topic:

zachować jedno na uwadze ze swojej realizacji. Ponieważ jest to forma do wypełnienia, użytkownicy najprawdopodobniej (bez myślenia) odsuwają mysz od drogi, gdy zaczynają pisać. To spowoduje zniknięcie formularza.

Mając to na uwadze, warto ponownie rozważyć możliwość wystąpienia zdarzenia mouseout. Zawsze możesz przesłać kopię zapasową, gdy użytkownik prześle formularz, z opcjonalnym przyciskiem "Anuluj" lub "Zamknij".

+0

Awesome! Ponieważ patrzysz na rzeczywistą stronę ... Spróbuj tego - jeśli najedziesz kursorem na listę rozwijaną, a następnie na mysz. Teraz szybko włączaj i wyłączaj mysz podczas wykonywania animacji slideUp. Powinieneś zobaczyć, jak to się kończy, gdy zostanie złapany w połowie animacji, a następnie najechanie na niego ponownie, nie spadnie lub spadnie tylko w części. To właśnie próbowałem naprawić za pomocą poleceń .stop() i .dequeue(), ale nadal jest to problem. jakieś pomysły? – Brian

+0

Cieszę się, że działa. Odnosząc się do nowego problemu, zauważyłem, że podczas korzystania z slideup/slidedown lub innych podobnych funkcji, może stracić kontrolę nad swoim właściwym miejscem docelowym, jeśli wywołasz stop(). Osobiście nie będę ich używał. Zamiast tego użyłbym metody animate() jQuery. W ten sposób trudno zakodować cel. Zmienię moją odpowiedź, aby pokazać, co mam na myśli. – user113716

+0

LOL! Funkcja .animate jest jeszcze bardziej glitchy niż slideDown. Możesz go zobaczyć na stronie. – Brian