Помогите объединить две функции для цикла jquery? - PullRequest
1 голос
/ 19 июля 2010

У меня есть две функции, которые я хотел бы использовать в своем обратном вызове с циклом jquery. Один перемещает пейджер, когда пользователь проходит по циклу, а другие центрируют изображение по горизонтали и вертикали внутри содержащего элемента. Оба прекрасно работают по отдельности, но я могу заставить их работать вместе над обратным вызовом. У меня есть пример, который показывает, что у меня есть, но функция обратного вызова настроена на обратный вызов после. - http://tinyurl.com/27pmzj5

Вот код, который у меня есть.

$(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);
        }

    }

}); 

Любая помощь в получении этих двух для работы до обратного вызова будет принята с благодарностью!

1 Ответ

1 голос
/ 19 июля 2010

Может быть, я неправильно понимаю вопрос, но вы не можете просто сделать:

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

?? Другими словами, просто установите обработчик «before» для функции, которая вызывает ваши две другие функции. Вы можете написать это как отдельную функцию, если вам нравится:

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

Чтобы сделать его немного менее уродливым, вы можете сделать это:

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