Управление 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
Ответы
Ответ 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 + ');');
У меня так много слайдов, которые загружаются из базы данных.