Встроенный Flash в asp.net аккордеон работает плохо - PullRequest
2 голосов
/ 12 марта 2009

Я использую аккордеонный расширитель инструментария ajax и замечаю, что он работает немного "фанк", когда я пытаюсь встроить некоторую флэш-память в разделы контента.

Вы можете видеть, над чем я сейчас работаю: http://kristinsconfections.com/gallery.aspx. Как вы можете видеть, когда вы переключаете аккордеон, это немного изменчиво. Я вытягиваю слайдшоу из flickr, поэтому я не могу это контролировать. Сайт предназначен только для друга, который пытается стать пекарем, поэтому он не является приоритетным, просто очень расстраивает !! Что-нибудь, что я могу сделать, используя javascript, .net или даже jquery ??

Вот точный код, который я использую на этой странице:

<cc1:Accordion ID="MyAccordion" runat="server" SelectedIndex="0"
        HeaderCssClass="accordionHeader" ContentCssClass="accordionContent"
        FadeTransitions="true" FramesPerSecond="40" TransitionDuration="250" AutoSize="None">
        <Panes>
            <cc1:AccordionPane ID="pnlCakes" runat="server">
                <Header><div ><span style="float:left;">Cakes</span></div></Header>
                <Content>
                    <object width="572" height="429" type="application/x-shockwave-flash"
                     data="http://www.flickr.com/apps/slideshow/show.swf?v=67089"> 
                    <param name="flashvars" value="&offsite=true&amp;lang=en-us&page_show_url=%2Fphotos%2F28792515%40N08%2Fsets%2F72157612640424865%2Fshow%2F&page_show_back_url=%2Fphotos%2F28792515%40N08%2Fsets%2F72157612640424865%2F&set_id=72157612640424865&jump_to=" />
                    <param name="allowFullScreen" value="true" />
                    <param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=67089" />
                    </object>
                </Content>
            </cc1:AccordionPane>
             <cc1:AccordionPane ID="pnlCookies" runat="server">
                <Header><div ><span style="float:left;">Cookies</span></div></Header>
                <Content>
                 <object width="572" height="429"  type="application/x-shockwave-flash"
                 data="http://www.flickr.com/apps/slideshow/show.swf?v=67089"> 
                <param name="flashvars" value="&offsite=true&amp;lang=en-us&page_show_url=%2Fphotos%2F28792515%40N08%2Fsets%2F72157612640405779%2Fshow%2F&page_show_back_url=%2Fphotos%2F28792515%40N08%2Fsets%2F72157612640405779%2F&set_id=72157612640405779&jump_to=" />
                <param name="allowFullScreen" value="true" />
                <param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=67089" />
                </object>
                </Content>
            </cc1:AccordionPane>
            <cc1:AccordionPane ID="pnlCupcakes" runat="server">
                <Header><div ><span style="float:left;">Cupcakes</span></div></Header>
                <Content>
                <object width="572" height="429"  type="application/x-shockwave-flash"
                 data="http://www.flickr.com/apps/slideshow/show.swf?v=67089"> 
                <param name="flashvars" value="&offsite=true&amp;lang=en-us&page_show_url=%2Fphotos%2F28792515%40N08%2Fsets%2F72157612589253131%2Fshow%2F&page_show_back_url=%2Fphotos%2F28792515%40N08%2Fsets%2F72157612589253131%2F&set_id=72157612589253131&jump_to=" />
                <param name="allowFullScreen" value="true" />
                <param name="movie" value="http://www.flickr.com/apps/slideshow/show.swf?v=67089" />
                </object>
                </Content>
            </cc1:AccordionPane>
        </Panes>
</cc1:Accordion>

Ответы [ 5 ]

2 голосов
/ 24 марта 2009

Мне кажется, что набор инструментов Ajax слишком неуклюжий. JQuery настолько прост в использовании, имеет хорошую межбраузерную поддержку и расширяемость, поэтому мы предпочитаем использовать его, и я рекомендую вам сделать то же самое В наборе JQuery UI есть аккордовый виджет , который должен отвечать всем требованиям.

Если загрузка всех видеороликов Flash в скрытые элементы div приводит к низкой производительности, существует событие, в которое вы можете вмешаться при изменении, где вы можете загрузить Flash. Это задокументировано на странице аккордеона (и это легко сделать с помощью JQuery).

1 голос
/ 26 марта 2009

Кажется, это давняя ошибка в Firefox, не специфичная для какого-либо конкретного виджета. Мои лучшие попытки:

<script type="text/javascript">
    function pageLoad() {
        var acc = $find('<%= MyAccordion.ClientID %>_AccordionExtender');
        acc.add_selectedIndexChanged(MyAccordion_SelectedIndexChanged);
    }
    function MyAccordion_SelectedIndexChanged(sender) {
        $("object").css("visibility", "hidden");
        setTimeout(
            function() { 
                $("object").eq(sender.get_SelectedIndex()).css("visibility", "visible"); 
            }, 1000);
    }
</script>
  1. Скрыть видимость объекта, чтобы анимация аккордеона воспроизводилась до
  2. Подождите 1 секунду - надеюсь, достаточно долго для завершения анимации, но не слишком долго, чтобы было заметное отставание
  3. Показать скрытый объект

Это исправляет мерцание, но объект вспышки исчезает, пока анимация воспроизводится через

0 голосов
/ 25 марта 2009

Я бы также порекомендовал использовать аккордеонный виджет jQuery . Я работал с ним, и он очень прост в использовании, легкий, работает во всех браузерах, и я не нашел никаких ошибок вообще. Есть много скинов, которые вы можете выбрать, и, если толчок придет к пушу, это не такая уж большая проблема в заднице - создать собственную кожу.

Кроме того, посмотрите, как вы встраиваете свои SWF-файлы, особенно атрибут wmode. Здесь есть хорошая пояснительная статья, написанная , с которой можно начать. Вы можете игнорировать режимы GPU и direct, потому что я думаю, что вы не используете SWF-файл, скомпилированный для Flash Player 10.

И, конечно, вы должны выгружать флэш-ролики, которые не видны.

0 голосов
/ 22 марта 2009

Вы пробовали в настоящее время поместить изображение предварительного просмотра в аккордеон? Затем, когда пользователь нажимает на изображение с помощью JavaScript, чтобы заменить его на Flash? Я думаю, это выглядело бы намного лучше.

Когда кто-то выбирает другую панель в аккордеоне (не уверен в событии для мониторинга - посмотрите в AccordionBehavior.js), тогда вы можете удалить вспышку, заменить ее изображением и продолжить.

Думаю, тогда вам не придется беспокоиться о взаимодействии флэш / браузера, которое вызывает у вас проблемы.

0 голосов
/ 20 марта 2009

Я тестировал его под FireFox3, IE8 и Chrome, и на самом деле он, кажется, работает хорошо в IE (версия 8), и не так хорошо в FF3 и Chrome.

Я нашел этот пост где-то, кто сталкивался с той же проблемой, и кажется, что установка свойства FadeTransitions на 'False' исправляет это, хотя я уверен, что это не то решение, на которое вы надеялись .

...