如果屏幕上有多个图像旋转器,我正在尝试制作自己的图像旋转器。这是我到目前为止所得到的:
// jQuery plugin to make image containers rotate.
(function($){
// Swap text with title attribute
$.fn.scWFWImageRotator = function() {
var rotatorTimeSwap = 6000;
$(this).find("img").removeClass("selected");
$(this).find("img:first-child").addClass("selected");
var rotatorImageChangeFunc = function(item) {
var rotatorImages = $(item).children("img");
var imgSelected = $(item).children("img.selected");
var rotatorImgCount = rotatorImages.length;
var rotatorCurImage = $(imgSelected).index(rotatorImages);
alert(item);
}
return this.each(function() {
var rotatorTimer;
var $this = $(this);
var func = $.proxy( rotatorImageChangeFunc, $this );
rotatorTimer = setInterval(func, rotatorTimeSwap);
$this.hover(
function() { rotatorTimer = clearInterval(rotatorTimer); },
function() { rotatorTimer = setInterval(func, rotatorTimeSwap); }
);
});
};
})(jQuery);
问题是:rotatorImageChangeFunc = function(item) {
项未传递给函数。所以在这个函数里面,我的项目未定义。为什么会这样呢?我该怎么做呢?
答案 0 :(得分:1)
传递给proxy
的上下文参数作为this
传递给函数,而不是参数。只需将item
更改为this
。
旁注:在您的主要功能中,您有几个$(this).find(...)
个。插件函数看到的this
已经一个jQuert对象(这就是下面的this.each(...)
有效的原因),无需再次调用$()
。只需this.find(...)
。
答案 1 :(得分:1)
$.proxy
仅为包装函数设置this
- 它不对函数参数执行任何操作。
setInterval()
会在没有参数的情况下调用您的代理函数,因此原始版本item
也将是未定义的。
要修复,请从函数声明中删除item
,并执行:
var item = this;
在函数的第一行。
[或使用item
重命名对this
的所有引用。
答案 2 :(得分:-1)
您尚未定义变量项anaywhere。