2010-09-18 14 views
7

ich jQuery bin mit Dinge zu schreiben, wie folgt aus:Schreiben Callback-Funktionen

$('#current_image').fadeOut(function(){ 
     $('#current_image').attr('src',newImage).show(); 
    }); 

Dieses schöne ist, sobald die fadeOut abgeschlossen ist, führt das verschachtelte Bit.

Ich möchte hier meine eigene Funktion machen, die FadeOut ersetzen würde. Wie würde meine Funktion aussehen, damit dieser Code funktioniert?

$('#current_image').customFadeOut(function(){ 
     $('#current_image').attr('src',newImage).show(); 
    }); 

Antwort

3

Der Schlüssel ist vorbei nur die Funktion Bezug auf die prototypische Methode, die Sie definieren und verbindlich, übergeben Funktion $.animate oder was auch immer Jquery Animation Funktion, die Sie verwenden intern darin.

HTML:

<div id="blah" style="color:#fff; opacity:1; background:black; height:50px; position:relative; ">fsdljfdsjfds</div> 
<a id="click" href="#">fjsd</a> 

JS:

$.fn.customFadeOut = function (callback) { 
    return $(this).animate({ 
     opacity: 0.25, 
     fontSize: "3em", 
     height: 'toggle' 
    }, 5000, function() { 
     callback.apply(this) 
    }); 

} 

$('#click').click(function() { 
    $('#blah').customFadeOut(function() { 
     alert('hi') 

    }) 

})​ 

Live Demo

+1

Can not "function() {callback.apply (this);}" durch "Rückruf" ersetzt werden? –

+0

Ja, aber vielleicht muss neben dem 'callback' eine allgemeine Funktionalität für alle' customFadeOut's vorhanden sein, damit diese Methode flexibler und expliziter ist. Ich denke, eine Demonstration von mehr Fähigkeiten ist besser als Prägnanz. Was passiert, wenn jemand 'customFadeOut' ohne Funktion aufruft? Dann würde es scheitern, und Sie wissen, wie es viele jQuery-Noobs gibt, die JS nicht kennen und/oder APIs nicht richtig lesen, um zu wissen, dass Sie ein Argument füttern müssen: p –