动态设置事件和关闭

时间:2010-02-01 16:42:23

标签: javascript

这是我之前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++; 
           }     
        }            
    } 
}

我是否需要在事件上定义闭包?

1 个答案:

答案 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); }; 除非你把它放在一个单独的函数中,否则这将不会按预期工作。