JavaScript图像旋转问题

JavaScript图像旋转问题,javascript,Javascript,我试图用JavaScript实现简单的图像旋转。延迟500毫秒,正如我在IE中预期的那样,但在Firefox中,浏览器中只显示序列中的最后一幅图像。Firebug在序列中除最后一个图像外的所有图像上显示Http加载状态为“中止”。如果我将延迟增加到2000毫秒,它在Firefox中似乎可以正常工作,但仅此而已 我如何在Firefox中避开这个问题,而不考虑旋转图像的延迟 这是我的密码: var camera = new Object; camera.dir = "./images

我试图用JavaScript实现简单的图像旋转。延迟500毫秒,正如我在IE中预期的那样,但在Firefox中,浏览器中只显示序列中的最后一幅图像。Firebug在序列中除最后一个图像外的所有图像上显示Http加载状态为“中止”。如果我将延迟增加到2000毫秒,它在Firefox中似乎可以正常工作,但仅此而已

我如何在Firefox中避开这个问题,而不考虑旋转图像的延迟

这是我的密码:

    var camera = new Object;
    camera.dir = "./images/";
    camera.images=["102.jpg","102-2.jpg","102-3.jpg","102-4.jpg","102-5.jpg"];

    var imageCounter = 0;
    var timerRotator;

    window.onload = function() 
    {
        initialize();  
    };   

    function initialize()
    {
        RotateImages();
    }

    function RotateImages()
    {
        if (imageCounter >= camera.images.length)
        {
            return;
        }   

        document.imgCamera.src = camera.dir + camera.images[imageCounter];
        imageCounter++;
        timerRotator = setTimeout("RotateImages()",500);
    }

通常当Firefox出现这样的错误时,是我做了一些不正确的事情

您是否尝试过在启动时预加载映像?也许可以解决这个问题

在初始化中执行foreach并为每张图片创建图像对象:

pic[i] = new Image();
...
这样,图像加载延迟不会使脚本崩溃。

不想吗

[] 这适用于所有浏览器

HTML

<img src="/firstpic.jpg" id="imgCamera" alt="" /> 


问题可能是您如何尝试选择DOM中的图像元素。这不是一种标准的方式。是这方面的标准方法。或者,如果你想获得所有图像,也有一个函数。

我知道我已经回答了这个问题,只是想添加如何将代码重构为一个单一对象。它使全局名称空间保持清晰,并封装相关内容

// pack the whole thing into a singleton objecz
var imageRotator = (function() {

  // with private variables only he knows
  var dir = "";
  var images = ["http://i3.ytimg.com/vi/vMQTbz1oB2E/default.jpg",
                "http://i4.ytimg.com/vi/sxzc1RbcrVs/default.jpg",
                "http://i2.ytimg.com/vi/5z1fSpZNXhU/default.jpg",
                "http://i3.ytimg.com/vi/B7UmUX68KtE/default.jpg"];
  var img = document.getElementById("imgCamera");
  var counter = 1;
  var timer;

  // and a public interface
  return {
     start: function () {
          // restart rotation
          if (counter >= images.length) {
              counter = 0;
          }

          // change the src and increment counter
          img.src = dir + images[counter];
          counter++;

          // RotateImages function can be passed by reference
          timer = setTimeout(imageRotator.start, 500);
       },
       stop: function() {
          clearTimeout(timer);
       }
   }; 
})();
然后你可以说:


我喜欢你重构它的方式。但是,Firefox仍然无法正确显示我的图像。你的例子是可行的,但在我的例子中,我认为这与我的图像大小有关(它们大约是20kb)。看起来,如果浏览器加载图像的时间比setTimeout中的延迟时间长,则不会显示图像。IE没有表现出这种行为。请检查我另一个答案中的示例。这种方法有效。如果它在IE中对你有效,它应该在FF中有效。
<img src="/firstpic.jpg" id="imgCamera" alt="" /> 
// pack the whole thing into a singleton objecz
var imageRotator = (function() {

  // with private variables only he knows
  var dir = "";
  var images = ["http://i3.ytimg.com/vi/vMQTbz1oB2E/default.jpg",
                "http://i4.ytimg.com/vi/sxzc1RbcrVs/default.jpg",
                "http://i2.ytimg.com/vi/5z1fSpZNXhU/default.jpg",
                "http://i3.ytimg.com/vi/B7UmUX68KtE/default.jpg"];
  var img = document.getElementById("imgCamera");
  var counter = 1;
  var timer;

  // and a public interface
  return {
     start: function () {
          // restart rotation
          if (counter >= images.length) {
              counter = 0;
          }

          // change the src and increment counter
          img.src = dir + images[counter];
          counter++;

          // RotateImages function can be passed by reference
          timer = setTimeout(imageRotator.start, 500);
       },
       stop: function() {
          clearTimeout(timer);
       }
   }; 
})();
// how cool is that? :)
window.onload = imageRotator.start;​