2010-07-19 13 views
1

J'ai deux fonctions que je voudrais utiliser dans mon rappel avant avec cycle jquery. On fait glisser le pager au fur et à mesure que l'utilisateur passe à travers, et l'autre centre l'image horizontalement et verticalement à l'intérieur du div contenant. Les deux fonctionnent très bien séparément, mais je peux sembler les amener à travailler ensemble sur le rappel avant. J'ai un exemple qui montre ce que j'ai encore la fonction de diapositive est définie sur le rappel après. - http://tinyurl.com/27pmzj5Besoin d'aide pour fusionner deux fonctions pour le cycle jquery?

Voici le code que j'ai jusqu'à présent.

$(function() { 

$('#photo-slideshow').cycle({ 
    timeout: 0, 
    next: '#next-btn', 
    prev: '#prev-btn', 
    before: align, 
    after: slide, 
    pager: '#nav', 
    // callback fn that creates a thumbnail to use as pager anchor 
    pagerAnchorBuilder: function(idx, slide) { 
     return '<li><a href="#"><img src="' + slide.src + '" width="75" height="75" /></a></li>'; 
    } 
}); 


//Play and Pause 
$('#pause-btn').click(function() { $('#photo-slideshow').cycle('pause'); return false; }); 
$('#play-btn').click(function() { $('#photo-slideshow').cycle('resume'); return false; }); 


//Align Image  
function align(curr,next,opts) { 

    //center the image 
    var $slide = $(next); 
    var w = $slide.outerWidth(); 
    var h = $slide.outerHeight(); 
    $slide.css({ 
     marginTop: (800 - h)/2, 
     marginLeft: (800 - w)/2 
    }); 


    //centers the DIV vertically!!!!  
    var divHeight = 800; 
    var theImageHeight = $slide.outerHeight(); 
    var newTopMargin = (divHeight - theImageHeight)/2; 
    if(theImageHeight > 800){ 
     $('#photo-slideshow').css({ 
      marginTop: newTopMargin 
     }); 
    } 


    //Adds caption and credit line 
    $('#photo-info').html(this.title) 
     .append('<p>' + "Credit: " + this.alt + '</p>'); 


} 


//Slide Pager 
function slide(a,b,c,d) { 
    if (c.currSlide < c.slideCount-3 || c.nextSlide == 0){ 
      var p = (c.nextSlide - 2 < 0) ? 0 : -(75*(c.nextSlide-2)); 
      $("#nav").animate({"left":p+"px"},500); 
     } 

    } 

}); 

Toute aide sur l'obtention de ces deux à la fois travailler sur le rappel avant serait grandement appréciée!

Répondre

1

Peut-être que je suis mal compris la question, mais ne peut vous le faire:

before: function(a, b, c, d) { 
    align(a, b, c); 
    slide(a, b, c, d); 
} 

?? En d'autres termes, définissez simplement le gestionnaire "avant" sur une fonction qui appelle vos deux autres fonctions. Vous pouvez l'écrire en fonction si vous le désirez:

function callBoth(a, b, c, d) { 
    align(a, b, c, d); 
    slide(a, b, c, d); 
} 

Pour un peu moins laid faire que vous pourriez faire ceci:

function callBoth() { 
    align.apply(this, arguments); 
    slide.apply(this, arguments); 
} 
+0

Pourriez-vous donner des détails sur la façon de mettre en œuvre? Im confus ... – hybrid

+0

Ah, c'est logique! Merci beaucoup pour l'aide rapide, c'est très apprécié! – hybrid