Подтвердить что ты не робот

Управление Flexslider из внешнего элемента.

У меня есть Flexislider, который я бы хотел контролировать извне элемента. Я пробовал это:

var myslider = $('.slider').flexslider({
    animation: 'slide'
});

$('button').click(function () {
    myslider.flexAnimate(3)    //Function: Move slider - (target, pause) parameters
});

Но это возвращает TypeError: Object [object Object] has no method 'flexAnimate'

Затем я наткнулся на этот поток (https://github.com/woothemes/FlexSlider/issues/125), который указывает, что это правильный метод:

$('button').click(function () {
    myslider.flexslider(3)
});

Однако я не вижу, как я могу указать скорость анимации. Я хочу, чтобы изменения были мгновенными для этого события.

Я думаю, мне интересно, как получить доступ к API-интерфейсу ползунка, как указано в документах вне элемента слайдера.

slider                        //Object: The slider element itself
slider.container              //Object: The ul.slides within the slider
slider.slides                 //Object: The slides of the slider
slider.count                  //Int: The total number of slides in the slider
slider.currentSlide           //Int: The slide currently being shown
slider.animatingTo            //Int: Useful in .before(), the slide currently animating to
slider.animating              //Boolean: is slider animating?
slider.atEnd                  //Boolean: is the slider at either end?
slider.manualPause            //Boolean: force slider to stay paused during pauseOnHover event
slider.controlNav             //Object: The slider controlNav
slider.directionNav           //Object: The slider directionNav
slider.controlsContainer      //Object: The controlsContainer element of the slider
slider.manualControls         //Object: The manualControls element of the slider
slider.flexAnimate(target)    //Function: Move slider - (target, pause) parameters
slider.pause()                //Function: Pause slider slideshow interval
slider.resume()               //Function: Resume slider slideshow interval
slider.canAdvance(target)     //Function: returns boolean if slider can advance - (target) parameter
slider.getTarget(dir)         //Function: get target given a direction - "next" or "prev" parameter
4b9b3361

Ответ 1

Вы можете получить доступ к объекту ползунка следующим образом:

var exampleSlider = $('#slider').data('flexslider');
// now you can access all the methods for example flexAnimate
exampleSlider.flexAnimate(..);

Как уже упоминалось выше, вы можете найти это в описании API на https://github.com/woothemes/FlexSlider (строка в источнике: https://github.com/woothemes/FlexSlider/blob/master/jquery.flexslider.js#L674)

Ответ 2

С последней версией Flexslider (2.1) вы можете использовать внешний api так:

$('button').click(function () {
    $('.slider').flexslider(3);
});

Полная информация об API находится в https://github.com/woothemes/FlexSlider#updates

Ответ 3

Это работало для меня:

    $('#slider').flexslider({
        animation: "slide",
        controlNav: false,
        animationLoop: false,
        slideshow: false,
        start: function(){
            $('#sliderNext').on('click', function(e){
                $('.flex-next').trigger('click');
            });
            $('#sliderPrev').on('click', function(e){
                $('.flex-prev').trigger('click');
            });
        }
    });

Ответ 4

Никто еще не ответил на главный вопрос: как запустить flexslider в лайтбокс на конкретном слайде без анимации, но потом анимация между слайдами. Я решил эту проблему следующим образом:

Перед тем, как открывать лайтбокс (используя обратный вызов лайтбокса), я устанавливаю скорость анимации flexslider равным 0:

self.$slider.data('flexslider').vars.animationSpeed = 0;

После открытия лайтбокса (с использованием обратного вызова lightbox) я меняю индекс flexslider и возвращаю предыдущее значение скорости анимации:

self.$slider.flexslider(this.index);
self.$slider.data('flexslider').vars.animationSpeed = 600; 

Ответ 5

Сначала вы можете попробовать установить объект слайдера:

$slider = $('.slideshow').flexslider();

затем используйте общедоступные методы flexslider:

$slider.data('flexslider').pause();
$slider.data('flexslider').play();

Ответ 6

var myslider = ('.flexslider').flexslider({
   animation: 'slide',
   animationLoop: false
});
myslider.flexslider(3);

Это работает для меня. хотя я использую его в другом формате.

var img = $('<span/>');
img.attr('onclick','myslider.flexslider('+ id + ');');

У меня так много слайдов, которые загружаются из базы данных.