Меню с анимацией и звуком

Тема в разделе "HTML, CSS, XML, JavaScript", создана пользователем soloilya, 6 сен 2006.

Статус темы:
Закрыта.
  1. soloilya

    soloilya Гость

    Репутация:
    0
    Есть меню с графическими кнопками, которые при наведении мыши менются, "swapimage" из опций Dreamweaver'а:

    в HEAD вот так:
    Код (Text):
    <script language="JavaScript" type="text/JavaScript">
    <!--
    function MM_swapImgRestore() { //v3.0
    var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
    }

    function MM_preloadImages() { //v3.0
    var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
    }

    function MM_findObj(n, d) { //v4.01
    var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
    if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
    for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
    if(!x && d.getElementById) x=d.getElementById(n); return x;
    }

    function MM_swapImage() { //v3.0
    var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
    if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
    }
    //-->
    </script>
    ну и в BODY у самой кнопки вот так:
    Код (Text):
    <a href="usl.htm" onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('usl','','pics/menu/2usl_on.gif',1)"><img src="pics/menu/2usl_off.gif" alt="Услуги" name="usl" width="36" height="50" border="0"></a>
    Оно работает.

    Понадобилось прикрутить звук к наведению мыши или хотя бы снятию мыши с кнопки.
    Я нашел вот такой код, сам по себе он работает:
    в HEAD:
    Код (Text):
    <script language="JavaScript"><!--
    function sound(ojectID,soundUrl){
    TheObject=document.getElementById(ojectID);
    TheObject.src = soundUrl;
    }
    --></script>
    в BODY:
    Код (Text):
    <bgsound src="click.wav" id="keySound" loop=0>
    к самой кнопке:
    Код (Text):
    <a href="index.html" onMouseOver="sound('keySound','click.wav')"><img src="pic.jpg"></A>
    Но при совмещении этих функций ничего не пашет...

    Возможно ли их как-то (корректно) совместить?
    Возможно ли другое решение? Просто меню уже давно работает... Чтобы не переделывать полностью, оставив его "базу"?
     
  2. Gisma

    Gisma Гость

    Репутация:
    0
    единственное, что могу сказать, совмести функции корректно
     
  3. soloilya

    soloilya Гость

    Репутация:
    0
    Gisma, спасибо за совет. По Вашему посту я понял, что это ВОЗМОЖНО и стал пробовать всевозможные варианты сочетаний. В итоге оно заработало вот так:

    в HEAD описания функций по отдельности;
    в начале BODY:
    Код (Text):
    <bgsound src="click.wav" id="keySound" loop=0>
    у самой кнопки:
    Код (Text):
    <a href="usl.htm" onMouseOut="MM_swapImgRestore()" onMouseOver="sound('keySound','click.wav'), MM_swapImage('usl','','pics/menu/2usl_on.gif',1)"><img src="pics/menu/2usl_off.gif" alt="Услуги" name="usl" width="36" height="50" border="0"></a>
    т.е. через запятую.
    Это правильно?

    Спрашиваю, поскольку теперь работает, но между наведением мыши и чудесной сменой кнопки вместе с воспроизведением звука проходит около секунды. Кнопка как бы виснет, через секунду нажимается...
    Посоветуйте пожалуйста, что еще можно сделать, чтобы это заработало нормально? Пробовал ставить функцию звука на onclick - тогда загружается страница по ссылке, потом слышен звук... не пойдет. Пробовал ставить на onmouseout - в этом случае кнопка залипает в зажатом виде, через секунду отлипает со звуком, но пока она не отлипнет, другие кнопки не нажать, выглядит как "тормоза"...
    Если менять порядок функций sound и MM_swapImage в строке onMouseOver="sound('keySound','click.wav'), MM_swapImage('usl','','pics/menu/2usl_on.gif',1)", ничего не менятеся. :(
    Сначала даже думал, что "тормозит" оттого, что звук весит 12 кб, заменил на другой, который менее 1 кб - все так же...

    Пожалуйста, посоветуйте что-нибудь, очень не хочется переделывать это меню во флэше...
     
  4. Gisma

    Gisma Гость

    Репутация:
    0
    операции не через запятую писать надо, а через ";" :( во-вторых тормозов быть не должно, у тебя где-то логика нарушена, можешь урл страницы дать?
     
  5. soloilya

    soloilya Гость

    Репутация:
    0
    Gisma, я Вам в личку написал. Тока вот не найду никак это сообщение в Sent Items, а экран типа "Сообщение отправлено" или "Сообщение не отправлено" я, видимо, проглядел :( Поэтому если оно не дошло, дайте знать please.
     
  6. soloilya

    soloilya Гость

    Репутация:
    0
    Все еще работаю нед меню. :angry:

    Функции совместить получилось - так, чтобы они вместе работали. Работают. Но плохо - между наведением мыши на кнопку и звуком проходит где-то полсекунды...

    Может быть, кто-нибудь мне что-то подскажет?

    http://www.avtoritetspb.ru/testsound.htm
     
  7. ioni

    ioni Well-Known Member

    Репутация:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    340
    Симпатии:
    0
    Если честно, то я бы вставил функцию воспроизведения звука внутрь MM__SwapImage, для того, чтобы функция была одна...

    Типа:
    Код (Text):
    function MM_swapImage() { //v3.0
    var i,j=0,x,a=MM_swapImage.arguments;
    document.MM_sr=new Array;
    for(i=0;i<(a.length-2);i+=3)

    if ((x=MM_findObj(a[i]))!=null){
    document.MM_sr[j++]=x;
    if(!x.oSrc)
    x.oSrc=x.src;
    x.src=a[i+2];
    sound('keySound','click.wav');
    }

    }

    function sound(ojectID,soundUrl){
    TheObject=document.getElementById(ojectID);
    TheObject.src = soundUrl;
    }
    Но задержка по-прежнему наблюдается...
    Дай-ка еще покопаться...
     
  8. Kuljok

    Kuljok Гость

    Репутация:
    0
    ИМХО быстрее бы получилось просто переделать это же меню на flash, если дизайн позволяет.
     
  9. ioni

    ioni Well-Known Member

    Репутация:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    340
    Симпатии:
    0
    Вот вот.
    И эффектов было бы больше :P
     
  10. soloilya

    soloilya Гость

    Репутация:
    0
    Полностью согласен. Видимо, так и придется поступить, если заказчик будет настаивать на этом дурацком щелкании кнопок... Ну или сказать ему "Ну извините, надо было сразу говорить!.." А то придумал, когда уже все сделано... :)

    Буду безмерно благодарен, если кто-нибудь подскажет, как сделать, чтобы оно на js не тормозило... ;)
     
Загрузка...
Похожие Темы - Меню анимацией звуком
  1. bedrov
    Ответов:
    2
    Просмотров:
    149
  2. KIra
    Ответов:
    0
    Просмотров:
    162
  3. kuklofon
    Ответов:
    4
    Просмотров:
    732
  4. bsl
    Ответов:
    1
    Просмотров:
    383
  5. Shouldercannon
    Ответов:
    2
    Просмотров:
    1.322
Статус темы:
Закрыта.

Поделиться этой страницей