代码之家  ›  专栏  ›  技术社区  ›  orandov

为什么jquery不能正确地淡化Flash对象?

  •  0
  • orandov  · 技术社区  · 15 年前

    我正在尝试淡出一个Flash嵌入对象并淡入常规HTML。

    出于某种原因,在淡出完成之前,fade out方法的回调会被多次激发。结果是,HTML在回调函数中被附加多次,并额外闪烁一段时间。

    当我尝试淡入普通HTML时不会发生这种情况。

    淡出功能是否不适用于Flash?

    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');
            });
        });
    
    5 回复  |  直到 12 年前
        1
  •  2
  •   jyoseph    15 年前

    我不能确切指出问题所在,但我有一个工作示例: 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> 
    

    希望有帮助,希望我理解正确!

        2
  •  8
  •   montrealist    15 年前

    我认为这是因为jquery没有能力操纵第三方多媒体对象的不透明性,即使它嵌入到标准HTML标记中。

    你的最佳选择可能只是定位一个不可见的DIV,它上面有相同的维度,然后淡入淡出(但这只是纯粹的猜测)。

        3
  •  1
  •   Sam Coult    14 年前

    我的解决方案,虽然它的工作方式并不完全相同,但它是使用fadin()中的回调函数将对象标记添加到div中。这确实意味着对象本身没有褪色,但我想给您一个假象,您可以将图像添加到div中,然后在fadein完成时用对象代码替换图像。

        4
  •  1
  •   Pio    12 年前

    所以我也有同样的问题。将wmode参数更改为“opaque”使其生效。

        5
  •  0
  •   Capsule    14 年前

    @Dalbaeb答案可能是最好的答案,但奇怪的是它失败了,并出现了一些丑陋的错误(jquery 1.4中未定义d,1.5中未定义e,看起来代码块与队列处理相关)。

    令人惊讶的是,它在jquery 1.3中工作。