2015-05-09 84 views
1

这个帖子的关注与我以前的帖子:GIFs changing randomly随机动画GIF格式改变

我旁边有3个彼此不同的动画。每一个都由不同的GIF组成,这些GIF是相互随机显示的。所以我为此写了html,但在这种情况下,只有第三个动画发生了变化,其余动画始终保持不变。对此有何想法? @Ismael米格尔

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title></title> 
<link href="styles/styles.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript"> 
<!-- 
window.onload = function() { 

    var images = [ 
      {src:'bilder/1/1.gif',delay:3500}, 
      {src:'bilder/1/2.gif',delay:1400}, 
      {src:'bilder/1/3.gif',delay:4000}, 
     ], 
     element = document.images['wechsel1'], 
     change_image = function() { 
      var image = images[ Math.floor(Math.random() * images.length) ]; 
      // (Math.random()*images.length)>>0 would be a lot faster 

      element.src = image.src; 

      setTimeout(change_image, image.delay); 
     }; 

    setTimeout(change_image); 

}; 
//--> 

<!-- 
window.onload = function() { 

    var images = [ 
      {src:'bilder/2/1.gif',delay:1800}, 
      {src:'bilder/2/2.gif',delay:1800}, 
      {src:'bilder/2/3.gif',delay:1800}, 
     ], 
     element = document.images['wechsel2'], 
     change_image = function() { 
      var image = images[ Math.floor(Math.random() * images.length) ]; 
      // (Math.random()*images.length)>>0 would be a lot faster 

      element.src = image.src; 

      setTimeout(change_image, image.delay); 
     }; 

    setTimeout(change_image); 

}; 
//--> 

<!-- 
window.onload = function() { 

    var images = [ 
      {src:'bilder/3/1.gif',delay:4300}, 
      {src:'bilder/3/2.gif',delay:3100}, 
      {src:'bilder/3/3.gif',delay:4100}, 
     ], 
     element = document.images['wechsel3'], 
     change_image = function() { 
      var image = images[ Math.floor(Math.random() * images.length) ]; 
      // (Math.random()*images.length)>>0 would be a lot faster 

      element.src = image.src; 

      setTimeout(change_image, image.delay); 
     }; 

    setTimeout(change_image); 

}; 
//--> 
</script> 
</head> 

<body> 
<div class="center"> 

    <div class="item top"> 
    <img id="wechsel1" src="bilder/1/1.gif" width="568" height="800" border="0" alt=""> 
    </div> 

    <div class="item"> 
    <img id="wechsel2" src="bilder/2/1.gif" width="568" height="800" border="0" alt=""> 
    </div> 

    <div class="item bottom"> 
    <img id="wechsel3" src="bilder/3/1.gif" width="568" height="800" border="0" alt=""> 
    </div> 

</div> 
</body> 
</html> 
+0

我建议打印“Math.floor(Math.random()* images.length)”的值,这在第一眼看来似乎是个问题。在脚本中使用html注释标记似乎有点奇怪......这是否有效? – Roberto

+0

@Robert这是因为(在上一个问题中,O.P.问)他试图创建1个元素,我只是给'window.onload'分配了一个函数。 O.P.重复了代码,每次他分配一个新的函数。这就是为什么它只能在最后一个工作。 –

+1

@Robert就像Ismael Migeul所说的,每次你调用'window.onload ='时,你都在为'window'对象的'onload'事件分配一个事件处理程序......这意味着,你正在*替换先前分配的事件处理程序(导致只有最后一个执行)。为了你的目的,你只需要做一次任务* – wahwahwah

回答

2

你的问题是,window.onload被赋予了新的功能,每次。

这意味着只有最后一个函数会'生存',并且会被执行。

你有2种选择:

  • 使用window.addEventListener('load',function(){ [code] }),有重复的代码
  • 重写它来处理元素的数组,个别间隔

最好的选择是:第二个。

而且我在这里改写它:

window.onload = function() { 
 

 
\t var colors = [ 
 
\t \t \t {name:'red',delay:3000}, 
 
\t \t \t {name:'yellow',delay:1000}, 
 
\t \t \t {name:'green',delay:2300}, 
 
\t \t \t {name:'blue',delay:2600}, 
 
\t \t \t {name:'pink',delay:1300}, 
 
\t \t \t {name:'purple',delay:500}, 
 
\t \t ], 
 
\t \t elements = document.getElementsByTagName('span'), //the array is here 
 
\t \t change_color = function (element) { 
 
\t \t \t var color = colors[ (Math.random() * colors.length)>>0 ]; 
 

 
\t \t \t element.style.color = color.name; 
 

 
\t \t \t setTimeout(function(){ 
 
\t \t \t \t change_color(element); 
 
\t \t \t }, color.delay); 
 
\t \t }; 
 

 
\t for(var i=0, l=elements.length; i<l; i++) 
 
\t { 
 
\t \t change_color(elements[i]); 
 
\t } 
 

 
};
<span style="background:black;font-family:sans-serif;font-size:20px;font-weight:bold;padding:10px;">I change color!</span> 
 

 
<br><br><br><!-- bad html! --> 
 

 
<span style="background:black;font-family:sans-serif;font-size:20px;font-weight:bold;padding:10px;">I change too!</span> 
 

 
<br><br><br> 
 

 
<span style="background:black;font-family:sans-serif;font-size:20px;font-weight:bold;padding:10px;">Look at me!</span>

此,再次使用相同的例子更改多个元素的颜色。

这可以很容易地改变来改变图像。