Почему JQuery не выцветает флеш-объект должным образом? - PullRequest
0 голосов
/ 04 августа 2009

Я пытаюсь исчезнуть из объекта 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');
        });
    });

Ответы [ 5 ]

8 голосов
/ 04 августа 2009

Я думаю, это потому, что jQuery не оборудован для манипулирования непрозрачностью стороннего мультимедийного объекта, даже если он встроен в стандартную разметку HTML.

Лучшей вашей ставкой может быть просто размещение невидимого DIV с такими же размерами поверх него, а затем просто затухание этого входа / выхода (но это просто спекуляция).

2 голосов
/ 05 августа 2009

Я не могу точно определить, в чем проблема, но у меня есть рабочий пример: 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> 

Надеюсь, это поможет, и я надеюсь, что я правильно понял!

1 голос
/ 28 декабря 2012

Так что у меня та же проблема. Изменение параметра wmode на «непрозрачный» заставило его работать.

1 голос
/ 19 мая 2011

Мое решение, хотя оно и не работает точно так же, было использовать функцию обратного вызова в fadIn () для добавления тегов объекта в div. Это означает, что сам объект не исчезает, но я полагаю, что у вас есть иллюзия, что вы можете добавить изображение в div, а затем заменить изображение на код объекта, когда fadeIn завершится.

0 голосов
/ 17 февраля 2011

@ dalbaeb ответ, вероятно, лучший, но странно, что он терпит неудачу с какой-то ужасной ошибкой (d не определено в jQuery 1.4 и e не определено в 1.5, похоже, кусок кода связан с обработкой очереди).

Удивительно, но это работает в jQuery 1.3!

...