0

我有一个接收预加载的JS 图像对象图像 url的函数。这是作为变量传入的。photo

我执行检查以查看“照片”变量是否为字符串。如果是,我创建一个新的图像对象并使用 onload 事件触发传入新创建的图像对象的 generateSlide() 函数,如下所示:

renderSlide: function (slideindex, photo, external, count, text) {
        var self = this;
        var image = new Image();
        if (typeof (photo) == 'string') {
            image.onload = function () {
                self.generateSlide(slideindex, image, external, count, text);
            };
            image.src = photo;
        } else {
            image.src = photo.src;
            self.generateSlide(slideindex, image, external, count, text);
        }
 },

如果“照片”变量是预加载的 JS 图像对象,我只需运行函数本身,将图像对象传递给 generateSlide();

一切都很好但是由于某种原因在 IE 9 中我不能简单地将“照片”变量直接传递到 generateSlide() 函数中。我必须创建一个新的图像对象并设置 src 以匹配照片对象的 src 属性。

这对我来说毫无意义,我不明白为什么会这样?

在 photo var 是实际 JS 图像对象的情况下,它被确认为在其他地方加载。(我正在预加载资产);

总之,上面的代码工作正常,但任何人都可以解释为什么我必须创建一个新的图像对象并且不能简单地传递原始图像对象?有没有更优雅的解决方案?到目前为止,我还没有注意到上述方法有任何问题,但有谁知道使用这种方法的任何陷阱。

提前致谢

4

1 回答 1

1

这听起来像是范围的问题。您是否尝试过关闭呼叫以确保捕获正确的照片?

renderSlide: function (slideindex, photo, external, count, text) {
        var self = this;

        if (typeof (photo) == 'string') {
           var image = new Image();
            image.onload = function () {
                self.generateSlide(slideindex, image, external, count, text);
            };
            image.src = photo;
        } else {
          (function(photo){
            self.generateSlide(slideindex, photo, external, count, text);
          })(photo);
        }

},

于 2012-11-16T16:45:03.853 回答