Встроенный Flash в asp.net аккордеон работает плохо
-
10-07-2019 - |
Вопрос
Я использую аккордеонный расширитель инструментария 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&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&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&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>
Решение
Я нахожу материал Ajax-инструментария слишком неуклюжим в целом. JQuery настолько прост в использовании, имеет хорошую межбраузерную поддержку и расширяемость, поэтому мы предпочитаем использовать его, и я бы порекомендовал вам сделать то же самое. Существует виджет аккордеона в комплекте пользовательского интерфейса JQuery, который должен отвечать всем требованиям.
Если загрузка всех фильмов Flash в скрытые элементы div приводит к низкой производительности, существует событие, в которое можно зацепиться за изменение, которое можно загрузить во Flash. Это задокументировано на странице аккордеона (и это легко сделать с помощью JQuery).
Другие советы
Кажется, это давняя ошибка в 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>
<Ол>
Это устраняет мерцание, но объект флэш-памяти исчезает, пока анимация воспроизводится через
Я протестировал его под FireFox3, IE8 и Chrome, и он действительно работает хорошо в IE (версия 8), и не так хорошо в FF3 и Chrome.
Я нашел этот пост где-то, кто сталкивался с той же проблемой, и кажется, что установка свойства FadeTransitions на «False» исправляет это, хотя я уверен, что это не то решение, на которое вы надеялись.
Вы пробовали в настоящее время поместить изображение предварительного просмотра в аккордеон? Затем, когда пользователь нажимает на изображение с помощью JavaScript, чтобы заменить его на Flash? Я думаю, что это выглядело бы намного лучше.
Когда кто-то выбирает другую панель в аккордеоне (не уверен в событии для мониторинга - посмотрите в AccordionBehavior.js), вы можете удалить флэш-память, заменить ее изображением и продолжить.
Думаю, тогда вам не придется беспокоиться о взаимодействии флэш-браузера с браузером, которое вызывает у вас проблемы.
Я бы порекомендовал также использовать виджет аккордеона jQuery . Я работал с ним, и он очень прост в использовании, легкий, работает во всех браузерах, и я не нашел никаких ошибок вообще. Есть много скинов, которые вы можете выбрать, и, если толчок придет к пушу, на самом деле это не такая уж большая боль в заднице - создать собственную кожу.
Кроме того, посмотрите, как вы встраиваете свои SWF, особенно атрибут wmode
. Вот хорошая пояснительная статья, написанная здесь , Вы могли бы начать с этого. Вы можете игнорировать режимы GPU
и direct
, потому что я думаю, что вы не используете SWF, скомпилированный для Flash Player 10.
И, конечно же, вы должны выгрузить флэш-ролики, которые не видны.