(function ( $ ) {
$.fn.gallery = function() {
var images = $(this);
return setInterval($.proxy(changeImage(images)), 500);
};
var i = 0;
var changeImage = function(images){
i++;
console.log(i);
var _images = images;
console.log(_images.length);
}
}( jQuery ));
$(function(){
$('.home-gallery').gallery();
});
此代码为我提供了console.log但不会每500毫秒重复一次。我只获得了一次用于" i"的控制台。和#34; _images.length"。在此之后它不会重复。
编辑:我删除了$ .proxy位,但仍然没有重复
$.fn.gallery = function() {
var images = $(this);
return setInterval(changeImage(images), 500);
};
答案 0 :(得分:1)
你无法传递类似的东西。你必须将它包装在一个匿名函数中。
你应该这样做:
setInterval(function () {
changeImage(images);
}, 500);
你在这里不需要$.proxy
,就像Rocket Hazmat在评论中所说的那样。
答案 1 :(得分:1)
你没有正确使用$.proxy
,你甚至不需要它。只是,简单地说:
return setInterval(function(){
changeImage(images)
}, 500);
答案 2 :(得分:-1)
两个答案都是正确的,但不完整。
setInterval()
的第一个参数需要是函数或字符串,因此将它包装在匿名函数中是一个好的开始。
接下来,由于setInterval()
在计时器后再次触发,因此范围会发生变化,变量“images”将不再存在。
你需要做这样的事情:
$.fn.gallery = function() {
var images = $(this);
return setInterval((function(images){
return function() {
$.proxy(changeImage(images));
};
})(images), 500);
};