Flexslider - скорость показа слайдов на каждом слайде
Я использую Flexslider, и мне было предложено отображать каждый слайд в другое время в зависимости от того, сколько контента у него есть, так быстро для короткого предложения и медленного для абзаца. Как я могу установить это, когда flexslide позволяет всего одно значение Slideshowspeed. Мой код:
$(window).load(function() {
$('#flexslider1').flexslider({
easing: "swing",
animation: "fade",
slideshowSpeed: 7000,
animationSpeed: 600,
startAt: 0,
initDelay: 0,
controlNav: true,
directionNav: true,
pausePlay: true,
pauseText: 'Pause',
playText: 'Play'
});
});
Ответы
Ответ 1
У меня была та же проблема, которая пыталась изменить только скорость одного слайда, чтобы отличаться от других. Это script, который я использовал, и он работает!
<script type="text/javascript">
$(window).load(function(){
$('.flexslider').flexslider({
animation: "fade",
slideshowSpeed: 1500,
animationSpeed: 1000,
controlNav: false,
start: function(slider){
slider.removeClass('loading');
},
after: function(slider){
if(slider.currentSlide == 3){
slider.pause();
setTimeout(function(){
slider.play();
}, 5000);
}
}
});
});
У меня есть всего 5 изображений, но я хочу, чтобы 4-й слайд (slider.currentSlide == 3) оставался дольше в течение 5 секунд.
Ответ 2
Я думаю, что нашел решение.
Я использую после обратного вызова, чтобы изменить интервал слайд-шоуSpeed:
$(window).load(function(){
$('.flexslider').flexslider({
animation: "slide",
slideshowSpeed: time,
controlNav: false,
directionNav: false,
pauseOnAction: false,
pauseOnHover: false,
pausePlay: true,
after: function(slider){
clearInterval(slider.animatedSlides);
slider.animatedSlides = setInterval(slider.animateSlides,*YOURTIME in MS*)
},
start: function(slider){
$('body').removeClass('loading');
}
});
});
Надеюсь, что это поможет!
Тибо.
Ответ 3
Понимая, что это старо, но для других людей, как и я, вы также можете это сделать: (с помощью FlexSlider v.2.2.2).
Добавьте атрибут продолжительности данных в li
<div class="flexslider" data-animation="fade" data-control-nav="false" data-slideshow="true" data-start-at="0">
<ul class="slides">
<li data-duration="6000">
<img src="http://placehold.it/600x210" alt="Alt" />
</li>
<li data-duration="2000">
<img src="http://placehold.it/600x200" alt="Alt Text" />
</li>
</ul>
</div>
И в инициализации страницы:
$hook = $('.flexslider');
$hook.flexslider({
animation: $hook.data('animation'),
controlNav: $hook.data('control-nav'),
slideshow: $hook.data('slideshow'),
startAt: $hook.data('start-at'),
pauseOnHover: true,
controlNav: false,
after: function(slider){
// clears the interval
slider.stop();
// grab the duration to show this slide
slider.vars.slideshowSpeed = $(slider.slides[slider.currentSlide]).data('duration');
// start the interval
slider.play();
}
});
Заклинание здесь:
http://jsfiddle.net/uzery/3/
Ответ 4
Поскольку ПОСЛЕ обратного вызова CALL после анимации первого слайда, нам нужно добавить таймаут к обратному вызову START (для 3 слайдов):
$(window).load(function() {
$('.flexslider').flexslider({
animation: "slide",
controlNav: false,
directionNav: false,
pausePlay: true,
animationSpeed: 300,
start: function(slider) {
clearInterval(slider.animatedSlides);
slider.animatedSlides = setInterval(slider.animateSlides, YOUR_TIMEOUT_FOR_FIRST_SLIDE(ONLY FOR START));
},
after: function(slider){
if(slider.currentSlide == 0) {
clearInterval(slider.animatedSlides);
slider.animatedSlides = setInterval(slider.animateSlides, FIRST_TIMEOUT);
}
if(slider.currentSlide == 1) {
clearInterval(slider.animatedSlides);
slider.animatedSlides = setInterval(slider.animateSlides, SECOND_TIMEOUT);
}
if(slider.currentSlide == 2) {
clearInterval(slider.animatedSlides);
slider.animatedSlides = setInterval(slider.animateSlides, THIRD_TIMEOUT);
}
}
});
});
Ответ 5
Я не знаю flexslider, но вы должны иметь возможность модифицировать скорость после обратного вызова функции события. Что-то вроде этого:
$('#flexslider1').flexslider({
easing: "swing",
animation: "fade",
slideshowSpeed: 7000,
animationSpeed: 600,
startAt: 0,
initDelay: 0,
controlNav: true,
directionNav: true,
pausePlay: true,
pauseText: 'Pause',
playText: 'Play',
after: function(){$(this).flexslider('slideshowSpeed',1000)}
});
Но теперь, как вы можете теперь, для какого слайда вам нужно изменить скорость. Документация flexslider не предоставляет никакой информации о том, какой аргумент передается после функции обратного вызова. И в зависимости от того, как этот плагин закодирован, его, возможно, невозможно изменить вариант "на лету", предполагая, что вам нужно уничтожить слайдер и воссоздать новый, в котором будет показано, какой шаг/слайд отображается в настоящее время, странное кодирование.
Итак, больной предлагаю вам связаться с главным разработчиком этого плагина или попытаться расширить его самостоятельно.
Ответ 6
Объединение двух ответов сверху
$hook = $('.flexslider');
$hook.flexslider({
animation: $hook.data('animation'),
controlNav: $hook.data('control-nav'),
slideshow: $hook.data('slideshow'),
startAt: $hook.data('start-at'),
pauseOnHover: true,
controlNav: false,
start: function(slider) {
var start_time = $(slider.slides[slider.currentSlide]).data('duration');
clearInterval(slider.animatedSlides);
slider.animatedSlides = setInterval(slider.animateSlides, start_time);
},
after: function(slider){
// clears the interval
slider.stop();
// grab the duration to show this slide
slider.vars.slideshowSpeed = $(slider.slides[slider.currentSlide]).data('duration');
// start the interval
slider.play();
}
});