0

Flash 埋め込みオブジェクトをフェードアウトし、通常の Html でフェードインしようとしています。

何らかの理由で、フェードアウトが完了する前に、フェードアウト メソッドのコールバックが複数回発生します。その結果、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');
        });
    });
4

5 に答える 5

8

標準の HTML マークアップに埋め込まれているにもかかわらず、jQuery にはサードパーティのマルチメディア オブジェクトの不透明度を操作する機能が備わっていないためだと思います。

あなたの最善の策は、同じサイズの目に見えない DIV をその上に配置し、それをフェードイン/アウトすることです (ただし、これは単なる憶測です)。

于 2009-08-04T19:33:51.710 に答える
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> 

お役に立てば幸いです。正しく理解できたことを願っています。

于 2009-08-05T07:15:33.657 に答える
1

私の解決策は、まったく同じようには機能しませんが、fadIn()でコールバック関数を使用してオブジェクトタグをdivに追加することでした。オブジェクト自体がフェードされていないことを意味しますが、divに画像を追加し、fadeInが完了したら、その画像をオブジェクトコードに置き換えることができるという錯覚を与えると思います。

于 2011-05-19T14:32:25.677 に答える
1

だから私は同じ問題を抱えています。wmode パラメータを「不透明」に変更すると、機能しました。

于 2012-12-27T20:43:44.617 に答える
0

@dalbaebの答えはおそらく最良のものですが、奇妙なことは、いくつかの醜いエラーで失敗することです(dはjQuery 1.4では定義されておらず、eは1.5では定義されていません。コードのチャンクがキュー処理に関連しているように見えます)。

驚いたことに、jQuery 1.3 で動作します。

于 2011-02-17T15:36:41.693 に答える