2015-05-09 88 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>

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

這可以很容易地改變來改變圖像。