所以我的JS有点生疏,但这是我的代码...... 基本上我有一个图像,在鼠标悬停时,它循环通过一个充满其他图像的隐藏div ...淡出它,替换src,然后淡入。它很有效。但是一旦它通过所有图像,我希望它重新开始并继续循环,直到mouseout事件停止它。
我想我可以在函数cycle_images($(current_image));
内再次调用该函数,但这会导致浏览器吓坏了,这是可以理解的。什么是实现这个目标的好方法?
$.fn.image_cycler = function(options){
// default configuration properties
var defaults = {
fade_delay: 150,
image_duration: 1500,
repeatCycle: true,
};
var options = $.extend(defaults, options);
this.each(function(){
var product = $(this);
var image = $('div.image>a.product_link>img', product);
var description = $('div.image>div.description', product);
var all_images = $('div.all_images', product);
var next_image = ($(all_images).find('img[src="' + $(image).attr('src') + '"]').next('img').attr('src')) ? $(all_images).find('img[src="' + $(image).attr('src') + '"]').next('img') : $(all_images).children('img').first();;
// mouseover
image.fadeOut(options.fade_delay, function(){
image.attr('src', next_image.attr('src'));
image.fadeIn(options.fade_delay);
});
if (options.repeatCycle){
var loop = function() {
product.image_cycler();
}
setTimeout(loop,options.image_duration);
}
});
};
$(document).ready(function() {
$('div.product').hover(function(){
$(this).image_cycler();
}, function(){
$(this).image_cycler({repeatCycle: false});
});
});
答案 0 :(得分:0)
听起来你想让它重新循环并停止鼠标移动。
定义cycle_images()函数后,添加一个标志,repeatCycle
cycle_images.repeatCycle = true;
在cycle_images函数结束时,添加一个带超时的递归调用
if (this.repeatCycle) {
var f = function() {
return cycle_images.apply(this, [$current_image]);
}
setTimeout(f,50);
}
然后在mouseout中,
cycle_images.repeatCycle = false;