Я не совсем понял, чего вы хотели, поэтому я сделал и то, и другое.
Если блок fadehover
также имеет класс animation
, он будет циклически проходить через все изображения внутри каждые 1,5 секунды, пока вы наводите курсор на блок. Без класса animation
изображение просто изменится на следующий.
Я надеюсь, что все комментарии достаточно ясны, чтобы вы могли понять, что я делал в сценарии. О, и вот демонстрация всего этого .
$(document).ready(function(){
// make first image in each block the current image & hide the rest
$(".fadehover").each(function(){
$(this).find("img:first").addClass("current");
$(this).find("img:not(:first)").hide();
});
// display next image
var timer,
nextImg = function(el) {
// fadeout current image
var curImg = el.find('img.current')
.removeClass('current')
.stop(true, true).fadeOut('slow');
// find next image; if no next image exist, reset to the first one
curImg = (curImg.next().length) ? curImg.next() : curImg.parent().find('img:first');
// fadein current (next) image
curImg
.addClass('current')
.fadeIn('slow');
};
// cycle through each image on hover
$(".fadehover").hover(function(){
var el = $(this);
// if the fadehover has the animation class, then cycle through the images while hovering
if (el.is('.animation')) {
timer = setInterval(function(){ nextImg(el); }, 1500);
}
// no animation, just show the next image on hover
nextImg(el);
}, function(){
var el = $(this);
// on mouseout, stop animation, or do nothing
if (el.is('.animation')) {
clearInterval(timer);
}
// fadeIn, just in case the clearInterval breaks the animation
el.find('.current').stop(true, true).fadeIn('slow');
});
});
Обновление ( новое демо )
Теперь, когда я понимаю, что вам нужно, попробуйте этот код:
$(document).ready(function(){
// make first image in each block the current image & hide the rest
$(".fadehover").each(function(){
$(this).find("img:first").addClass("current");
$(this).find("img:not(:first)").hide();
});
// display next image
var timer,
nextImg = function(el) {
// fadeout current image
var curImg = el.find('img.current')
// find next image; if no next image exist, add "done" class
if (curImg.next().length) {
// fadein current (next) image
curImg
.removeClass('current')
.stop(true, true).fadeOut('slow')
.next()
.addClass('current')
.fadeIn('slow');
} else {
el.addClass('done');
}
};
// cycle through each image on hover
$(".fadehover").hover(function(){
var el = $(this);
// if the element has the "done" class, then stop
if (!el.is('done')) {
timer = setInterval(function(){ nextImg(el); }, 2000);
}
}, function(){
var el = $(this);
if (el.is('done')) { return; }
// on mouseout, stop animation
clearInterval(timer);
// fadeIn, just in case the clearInterval breaks the animation
el.find('.current').stop(true, true).fadeIn('slow');
});
});