PDA

Просмотр полной версии : Флэш-меню не работает правильно


WWWD
21.01.2006, 04:09
итак, есть замысел: использовать одну и ту же флэшку как ячейку меню а инфу в неё грузить из html страницы.

Вот как я это реализовал в html:


//-------------скриптовая часть-----------
<script type="text/javascript">
function makeMenu(name, target, enable){
var a = new Array()
a[1] = name
a[2] = target
a[3] = enable
document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="100%" height="50">');
document.write('<param name="movie" value="flash/menu_item.swf?ar2='+a[3]+a[2]+'">');
document.write('<param name=quality value=high>');
document.write('<param name="FlashVars" value="ar='+a[1]+'">');
document.write('<embed src="flash/menu_item.swf?ar2='+a[3]+a[2]+'" FlashVars="ar='+a[1]+'" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="100%" height="50"></embed>');
document.write('</object>');
}</script>
//-------------/скриптовая часть-----------

//-------------HTML часть-------------------
<td width="20%" class="main_button" valign="middle"><script type="text/javascript">makeMenu("page1", "./page1.html", "1")</script></td>
<td width="20%" class="main_button" valign="middle"><script type="text/javascript">makeMenu("page2", "./page2.html", "1")</script></td>
<td width="20%" class="main_button" valign="middle"><script type="text/javascript">makeMenu("page3", "./page3.html", "1")</script></td>
<td width="20%" class="main_button" valign="middle"><script type="text/javascript">makeMenu("page4", "./page4.html", "1")</script></td>
<td width="20%" class="main_button" valign="middle"><script type="text/javascript">makeMenu("page5", "./page5.html", "1")</script></td>
//-------------/HTML часть-------------------


Как видно из примера, я хотел чтобы использлвался один и тот же flash файл для ускорения загрузки, я почему-то считал что с сервера таким путём все пять ячеек будут создаваться одновременно, но:

- создаются они далеко не одновременно, как будто каждая грузится заново.
- в temporary internet files есть много копий одного и того же файла так что похоже что они действительно создаются каждый раз заново.

Вопрос: где моя ошибка и можно ли это вообще сделать так как я хочу?
Респект всем кто поможет.

KidsKilla
21.01.2006, 04:16
для этого делается всё в 1й флешке а инфа грузится из иксмл.

а вообще руки обрывать тем, у кого в хтмл сайте меню на флешке.

WWWD
21.01.2006, 04:26
а вот если можно, подробнее, что именно нужно делать в первой флешке и как её скопировать в другие ячейки так чтоб заново не грузило?


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

KidsKilla
21.01.2006, 06:32
я сегодна писал в руфлеш 1ну штуку.
тебе тоже подойдёт. завтра как найду, напишу.
суть: флешки вставлялись почти так же но по виндоу.онлоад.

undeddy
21.01.2006, 13:06
а вообще руки обрывать тем, у кого в хтмл сайте меню на флешке.
Объясни, почему.

WWWD
21.01.2006, 14:29
спасибо, ждём-с

KidsKilla
21.01.2006, 15:19
по мотивам тв-во скрипта.
не проверял, могут быть ошибки. но суть ясна.
<script type="text/javascript">
document.flashes = [];
function pasteMenu(src,w,h,param,vars){
var txt='<object classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="'+w+'" height="'+h+'">';
txt+='<param name="movie" value="'+src+'?'+param+'">';
txt+='<param name=quality value=high>';
txt+='<param name=FlashVars value="ar='+vars+'">';
txt+='<embed src="'+src+'?'+param+'" FlashVars="ar='+vars+'" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="'+w+'" height="'+h+'"></embed>';
txt+='</object>';
document.write('<div id="f'+document.flashes.length+'"></div>');
document.flashes.push(document.getElementById(['f'+document.flashes.length),txt])
}
window.onload=function(){
for(var i in document.flashes) document.flashes[i][0].innerHTML=document.flashes[i][1]
}
</script>
хтмл:
<script>
pasteMenu("flash/menu_item.swf","100%",50,"1./page1.html","page1"); </script>
<noscript>тут дубль</noscript>

KidsKilla
21.01.2006, 15:22
Объясни, почему.
мею = навигация. должно быть доступно безусловно. во всех 100%, а значит уже не флеш.
дубль меню внизу страницы -- левая отмазка.
меню это сугубо функциональная вещь, а не рюшечки.
+ это крайне плохой стиль.

всё остальное объяснять не намерен. зайди на любой сайт по юзабилити, тебе объяснят и даже больше.

WWWD
22.01.2006, 04:39
однако... даже данные мои подставил, за что отдельное спасибо, но либо я не понимаю скрипта, либо там всё-таки логическая ошибка есть (более мелкие уже подправил (сайл)).
Конкретно:
функция pasteMenu ещё не выполняется (?), а функция на onload уже выплонена.
Как я понимаю, именно функция на onload вписывает флэш в div'ы, но как она это может сделать если pasteMenu их ещё не создала и document.flashes данными не заполнила?
PS. если это бред, просьба не посылать меня слишком далеко

KidsKilla
22.01.2006, 10:08
попробуй не window.onload, а document.body.onload хотя по идее всё должно пахать. бо алгоритм такой:
pasteMenu вставляет моментально дивы, и задаёт им айди, по которым эти дивы тут же и заносятся в массив. а как окошко загрузилось (явно после всех этих действий) в эти дивы проставляются флешки.

тут баг:
document.flashes.push(document.getElementById(['f'+document.flashes.length),txt])
надо:
document.flashes.push([ document.getElementById('f' + document.flashes.length), txt])

undeddy
22.01.2006, 15:49
А что за функция push()?

WWWD
22.01.2006, 16:59
открываешь Flash, жмёшь F1, пишешь push(), жмёшь search