Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   HTML/DHTML/CSS/JS/VB (http://www.flasher.ru/forum/forumdisplay.php?f=66)
-   -   Флэш-меню не работает правильно (http://www.flasher.ru/forum/showthread.php?t=74491)

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

Цитата:

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

Объясни, почему.

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>

хтмл:
Код HTML:

<script>
pasteMenu("flash/menu_item.swf","100%",50,"1./page1.html","page1"); </script>
<noscript>тут дубль</noscript>


KidsKilla 21.01.2006 15:22

Цитата:

Сообщение от undeddy
Объясни, почему.

мею = навигация. должно быть доступно безусловно. во всех 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])


Часовой пояс GMT +4, время: 19:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.