这是我之前one的后续问题: 我有这个对象:
var myObject {
init: function(){
for (var i = 0; i <3; i++) {
image = new Image();
.
.
.
image.onmouseover = this.Fade(this, 70, 100,1);
image.onmouseout = this.Fade(this, 100, 70,0);
}
},
SetOpacity: function (eID, opacity){
eID.style.opacity = opacity / 100;
eID.style.filter = 'alpha(opacity=' + opacity + ')';
} ,
fade: function (eID, startOpacity, endOpacity){
var timer = 0;
if (startOpacity < endOpacity) {
for (var i = startOpacity; i <= endOpacity; i++) {
(function(opacity) {
setTimeout(function() {SetOpacity(eID, opacity);}, timer * 30);
})(i);
timer++;
}
}
}
}
我是否需要在事件上定义闭包?
答案 0 :(得分:0)
是
否则,image
变量将由所有三组鼠标处理程序共享,并且所有动画都将发生在最后一个图像上(即使您将鼠标移到另一个图像上)。
另外,在setTimeout
回调中,您应该写MySlideshow.setOpacity
。
编辑:您的代码(image.onmouseover = this.Fade(this, 70, 100,1)
)调用 Fade
方法并将其返回的函数分配给onmouseover
属性。由于Fade
方法不返回函数,因此无效。
您需要将其更改为image.onmouseover = function() { MySlideShow.Fade(this, 70, 100, 1); };
除非你把它放在一个单独的函数中,否则这将不会按预期工作。