2012-04-09 4 views
2

ich für Leichtigkeit dieser Funktion bin mit, wie ich fadeTo viel verwenden werde:Jquery | Funktion innerhalb derselben Funktion. Es schlechte Praxis?

function fade_to(div, speed, opacity, after_fade) { 
    $(div).fadeTo(speed, opacity, after_fade); 
} 

Dann nenne ich die gleiche Funktion für after_fade Parameter:

fade_to('#div', 3000, 1, function() { fade_to('#another_div', 3000, 1)}); 

Ist das eine schlechte Sache machen? Habe ich Probleme mit Geschwindigkeit/Glätte? Ist es besser, jQuerys Standard-Funktion fadeTo zu verwenden?

Danke!

+2

Was bringt es dir? – zetlen

+0

scheint ein wenig sinnlos – nodrog

+2

nichts falsch daran zu sein, wird die Leistung gleich sein, aber ich sehe nicht den Vorteil. Sie könnten es vorteilhafter machen, wenn Sie einige Parameter überspringen, die immer gleich sind, oder vielleicht $ ('#' + div) verwenden und einfach die ID des Elements übergeben – ericosg

Antwort

4

Es gibt keinen Gewinn mit Ihrer Methode. Außerdem verwenden Sie die Funktion jQuery fadeTo. Es ist nichts falsch mit dem, was du getan hast, nur kein Gewinn. Man könnte die Arbeit mit einer solchen Technik sparen, wenn Sie zum Beispiel weniger Argumente in der benutzerdefinierten Funktion hatte:

function fade_to(div, after_fade) { 
    $(div).fadeTo(3000, 1, after_fade); 
} 

fade_to('#div', function(){ fade_to('#another_div', $.noop); }); 

Dies würde tatsächlich sparen Sie arbeiten, indem Sie verhindern, dass mit Argumenten Geschwindigkeit und Opazität einzugeben. Man könnte es auch wie diese dann

function Fade_to(speed, opacity){ 
    return function(div, callback){ 
      $(div).fadeTo(speed, opacity, callback); 
    } 
} 

Curry könnten Sie Argument Sparfunktionen on the fly wie

var fade_to_foo = Fade_to(3000, 1); 
fade_to_foo('#div', function(){ fade_to_foo('#another_div'); }); 

Ansonsten machen gibt es keinen Grund, nicht nur den Weg jQuery schreiben

$('#div').fadeTo(3000, 1, function(){ $('#another_div').fadeTo(3000, 1); }); 
+0

+1 Ich mag diese Antwort, außer dass ich die Funktion für einige oder alle Parameter Standardeinstellungen eingerichtet haben. Es kann ein paar Eingaben erforderlich sein, aber es könnte den Code wirklich reduzieren. Zum Beispiel würde ich das '$ .noop' ​​in die Funktion einfügen und etwas wie' after_fade || tun $ .noop'. –

+0

ja das ist wahr. – Fresheyeball

+0

... ah, ich sehe dich mit einem Curry-Beispiel aktualisiert. Das ist eine andere gute Idee. –

1

Ihre Vorgehensweise ist praktisch. Ich bezweifle, dass es den Fade-Effekt verlangsamen wird. Es ist nichts falsch mit diesem Ansatz in meinen Gedanken. Wenn Sie entschieden haben, dass Ihr Fade-Effekt vor dem Fading pulsieren oder blinken soll, müssten Sie nur Ihre Funktion ändern, um zu blinken und dann alle Fades zu verblassen, um die neue Routine auszuführen. In diesem Fall ist es sinnvoll, den Code zu reduzieren und die Wartbarkeit zu verbessern. Ericosg macht einen gültigen Punkt, aber warum nicht die Parameter reduzieren, wenn sie gleich sein werden.

5

Es ist eine schlechte Übung, weil Sie nicht mehr Modifikatoren verwenden können, ohne sie auf jede Instanz anzuwenden, bei der Ihre Funktion aufgerufen wird. Da Sie Modifikatoren in jQuery verketten können, und die meisten würden zustimmen, dass dies eine nützliche Funktion ist, deaktivieren Sie diese nützliche Funktion für sich selbst oder für andere Personen, die an diesem Code-Body arbeiten.

Wenn Sie zusätzliche Animationen oder Stylings hinzufügen möchten, müssen Sie das Objekt diesmal erneut über reguläres jQuery auswählen. Extra Arbeit, extra Anrufe, kein wirklicher Nutzen.

+0

+1 Großartiger Punkt über jQuery Verkettung. –

+0

Eine 'return' Anweisung würde dafür sorgen. –

1

Diese Vorgehensweise steht dem Ziel entgegen, jQuery als verkettbare Bibliothek mit kurzer Syntax zu verwenden. Wenn diese spezifische Funktionalität jedoch für ein Projekt nützlich ist, kann sie effektiv sein.

1

Mike,

Ich weiß nicht, dass dies notwendigerweise eine ‚schlechte‘ Sache zu tun, da es einfacher Bedienbarkeit oder etwas bieten könnte (nicht sicher, da ich weiß nicht, den Kontext Ihrer Beispiel), dass die Verwendung der in einer API angegebenen Standardfunktion nicht

Eigentlich, eine Funktion Aufruf selbst verwendet eine Idee in CS namens "Rekursion", die für die Traversing Bäume nützlich sein kann (Sie können beide Rekursion und Bäume google eine bessere Idee von dem, was ich hier beziehen)), oder eine Art von mathematischer Operation durchführen (dh euklidischer Algorithmus).

Ich würde sagen, wenn Sie das tun, ist es eine gute Idee zu fragen, "warum". Sie werden nichts in Bezug auf die Geschwindigkeit gewinnen, da Sie die Parameter um eine zusätzliche Zeit verlängern, und Ihre Funktion bringt im Vergleich zur Implementierung der API nichts mehr (zumindest das, was ich sehe). Wenn Sie sich eine Angewohnheit daraus machen würden ... sagen wir mal mit einer Berechnungssteuerungsfunktion ... könnten Sie eine Verlangsamung bemerken.

Ich hoffe, hier nicht nur Ihre Frage zu beantworten, sondern Ihnen einen weiteren Einblick zu geben, warum es generell eine schlechte Idee ist, dies zu tun. Ich stimme mit Dunsmoreb und Thomasdotnet überein. Gute Argumente!

-sf

1

Es ist besser Funktion Verzugs des verwenden, um nur jQuery fadeTo. nur das.

Verwandte Themen