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

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

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

    soloilya Гость

    Есть меню с графическими кнопками, которые при наведении мыши менются, "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 Гость

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

    soloilya Гость

    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 Гость

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

    soloilya Гость

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

    soloilya Гость

    Все еще работаю нед меню. :angry:

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

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

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

    ioni Well-Known Member

    Регистрация:
    11 май 2006
    Сообщения:
    351
    Симпатии:
    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 Гость

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

    ioni Well-Known Member

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

    soloilya Гость

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

    Буду безмерно благодарен, если кто-нибудь подскажет, как сделать, чтобы оно на js не тормозило... ;)
     
Загрузка...
Статус темы:
Закрыта.

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