2009-08-04 30 views
0

我想淡出一個Flash嵌入對象並淡入正常的Html。爲什麼JQuery不能正確淡入Flash對象?

由於某種原因,淡出方法的回調在淡出完成之前被多次觸發。結果是Html在回調函數中被多次追加,並且閃爍了額外的時間。

當我嘗試淡入常規Html時,不會發生這種情況。

淡出功能是否不適用於閃存?

HTML:

<a id="HideFlash" href="#">Hide Flash</a> 
<div id="FlashContainer" > 
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" 
     width="100" height="50" id="TEST" align="middle"> 
     <param name="allowScriptAccess" value="sameDomain" /> 
     <param name="allowFullScreen" value="false" /> 
     <param name="movie" value="demo_banner.swf" /> 
     <param name="quality" value="high" /> 
     <param name="bgcolor" value="#ffffff" /> 
     <param name="wmode" value="transparent"> 
     <embed src="demo_banner.swf" quality="high" wmode="transparent" bgcolor="#ffffff" width="100" height="50" name="TEST" 
      align="middle" allowscriptaccess="sameDomain" allowfullscreen="false" type="application/x-shockwave-flash" 
      pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
    </object> 
</div> 
<div id="RegularContent" > 
<h1>Before Fade</h1> 
</div> 

JQuery的:

$('#HideFlash').click(function() { 
     $('#FlashContainer *').fadeOut('slow', function() { 

      $('#FlashContainer').append("<p style='display: none;'>This is in the flash container</p>"); 
      $('#FlashContainer p').fadeIn('slow'); 
     }); 

     $('#RegularContent *').fadeOut('slow', function() { 

     $('#RegularContent').append("<p style='display: none;'>This is in the regular content after fade</p>"); 
     $('#RegularContent p').fadeIn('slow'); 
     }); 
    }); 

回答

2

我無法查出究竟是什麼問題,但我這裏有一個工作示例: http://jsbin.com/ayoqe

我認爲這可能是你的jQuery選擇星號*?它看起來好像你試圖隱藏容器內的所有東西,而不是隱藏容器本身。

$(document).ready(function(){ 

    $('#RegularContent').hide(); // hide the regular content on load 

    $('#HideFlash').click(function() { 
     $('#FlashContainer').fadeOut('slow'); // fade out the flash container  
     $('#RegularContent').fadeIn('slow'); // fade in the regulare content 
     return false; 
    }); 

}); 


<a id="HideFlash" href="#">Hide Flash</a> 
<div id="FlashContainer" > 
    <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/AlPqL7IUT6M&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/AlPqL7IUT6M&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object> 
</div> 
<div id="RegularContent"> 
<h1>Before Fade</h1> 
</div> 

希望有幫助,我希望我理解正確!

+0

我試圖將淡入淡出應用於Flash對象本身。這就是我用這顆星的原因。我猜你是對的,我應該將淡入淡出應用於FlashContainer。謝謝 – orandov 2009-08-05 16:26:34

8

我想這是因爲jQuery沒有配備操縱第三方多媒體對象的不透明度,即使它被嵌入轉換爲標準的HTML標記。

你最好的選擇可能就是將一個看不見的DIV放在它的頂部,然後淡入淡出(但這只是純粹的猜測)。

0

@dalbaeb答案可能是最好的一個,但奇怪的是它會帶來一些醜陋的錯誤(d在jQuery 1.4中未定義,e在1.5中未定義,看起來像代碼塊與隊列處理有關) 。

令人驚訝的是,它工作在jQuery 1.3!

1

我的解決方案,儘管它不完全相同的方式工作,是使用fadIn()中的回調函數將對象標籤添加到div。它的確意味着對象本身沒有被淡化,但是我想給幻想添加一個圖像到div,然後在淡入完成時用對象代碼替換圖像。

1

所以我得到同樣的問題。將wmode參數更改爲「不透明」使其起作用。