2016-05-13 13 views
-1

Ich habe diese einfache Funktion:jquery Knebel() löst unerwünschte Animation

$('.tools-dropdown-launch').click(function(e) { 
    e.preventDefault(); 
    $('.tools-dropdown-content').toggle(function() { 
     fixPanelHeight(); 
    }); 
}); 

die Sichtbarkeit eines anderen div wechseln sollte, aber mit keine Animationen. Stattdessen habe ich eine ähnliche slideToggle() Art der Animation. die Funktion ausgelöst ist folgende:

function fixPanelHeight() { 
    var maxPanelHeight = 0; 
    $(".inner-menu-panel-containter").children(".menu-panel").each(function(){ 
     var element = $(this); 
     element.css("height", "auto"); 
     if (element.height() > maxPanelHeight) { 
      maxPanelHeight = element.height(); 
     } 
    }) 
    if (maxPanelHeight > 0) { 
     $(".inner-menu-panel-containter").children(".menu-panel").height(maxPanelHeight); 
    } 
} 

Ich habe versucht, die erste Funktion zu

$('.tools-dropdown-launch').click(function(e) { 
    e.preventDefault(); 
    $('.tools-dropdown-content').toggle(); 
}); 

verändert und es funktioniert wie erwartet: Ich habe keine Animationen aber die Funktion (natürlich) auslöst nicht.

Warum passiert das?

Es gibt keine Höhenübergänge in der CSS und es gibt keine slideToggle() irgendwo in der JS-Datei.

ist dies mit

$('.tools-dropdown-content').slideToggle(0 , function() { 
     fixPanelHeight(); 
    }); 

gelöst, aber ich würde etwas besser als dieses quickfix bevorzugen.

+0

Die Übergabe der vollständigen Callback-Funktion an die Methode jq [toggle()] (http://api.jquery.com/toggle/) ruft Animationen mit der Standarddauer (400ms) auf. Jetzt ist nicht klar, was ist dein erwartetes Verhalten? Was ist falsch daran, nur 'toggle()' zu benutzen? –

+0

Ich erwarte keine Animation, da ich toggle() und nicht slideToggle() in meiner Funktion verwende. Gibt es eine Möglichkeit, dies zu vermeiden. Ich muss Anzeige umschalten: keine/Block ohne Spezialeffekt, Übergang oder Animation – valerio0999

+0

Aber ich bin immer noch nicht sicher, warum können Sie nicht einfach '.toggle()'? Es wird keine Animation verwendet. Und weil es dann synchron ist, können Sie einfach folgendes verwenden: '$ ('. Tools-dropdown-content'). Toggle(); fixPanelHeight(); ' –

Antwort

-1
$("#show_advance").click(function() { 
      // $(".ad_search").slideToggle("slow"); 
      if ($(".ad_search").is(':hidden')) { 
       $('.advance_search').text('hide Advance Search'); 
       $(".ad_search").slideToggle("slow"); 
      } 
      else { 
       $('.advance_search').text('Show Advance Search'); 
       $(".ad_search").slideToggle("slow"); 
      } 
     }); 

Verwenden Sie dies möglicherweise hilfreich für Sie.