it-roy-ru.com

Управление 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
19
Sebastien

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

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 )

42
driechel

С последней версией Flexslider (2.1) вы можете использовать внешний API следующим образом:

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

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

14
atomicjeep

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

    $('#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');
            });
        }
    });
3
Joe L.

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

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

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

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

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

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

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

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

$slider.data('flexslider').pause();
$slider.data('flexslider').play();
1
benbyford
var myslider = ('.flexslider').flexslider({
   animation: 'slide',
   animationLoop: false
});
myslider.flexslider(3);

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

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

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

0
stephen Tamuno-opubo