2010-09-18 18 views
7

que estoy usando jQuery para escribir cosas como esta:funciones de devolución de llamada de escritura

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

Esto es precioso, una vez que el fadeOut ha completado, el bit anidada se ejecuta.

Me gustaría hacer aquí mi propia función que reemplazaría a fadeOut. ¿Cómo se vería mi función para que este código funcione?

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

Respuesta

3

La clave está justo pasando la referencia de función para el método de prototipos se define, y vinculante que la función pasa a $.animate o lo que sea función de animación jQuery utiliza internamente en eso.

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

no puede "function() {callback.apply (este);}" se sustituyen por "devolución de llamada"? –

+0

Sí, pero tal vez sea necesario que haya una funcionalidad general para todos los 'customFadeOut's además de' callback', por lo que esta forma es más flexible pero más explícita. Creo que una demostración de más capacidades es mejor que una brevedad. Además, ¿qué pasa si alguien llama 'customFadeOut' sin una función? Entonces fallaría, y sabría que hay muchos noobs jQuery que no conocen JS y/o no leen API correctamente para saber que tendrían que alimentar un argumento: p –

Cuestiones relacionadas