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

  • Автор темы Автор темы soloilya
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.
S

soloilya

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

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

Возможно ли их как-то (корректно) совместить?
Возможно ли другое решение? Просто меню уже давно работает... Чтобы не переделывать полностью, оставив его "базу"?
 
единственное, что могу сказать, совмести функции корректно
 
Gisma, спасибо за совет. По Вашему посту я понял, что это ВОЗМОЖНО и стал пробовать всевозможные варианты сочетаний. В итоге оно заработало вот так:

в HEAD описания функций по отдельности;
в начале BODY:
Код:
<bgsound src="click.wav" id="keySound" loop=0>
у самой кнопки:
Код:
<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 кб - все так же...

Пожалуйста, посоветуйте что-нибудь, очень не хочется переделывать это меню во флэше...
 
операции не через запятую писать надо, а через ";" :( во-вторых тормозов быть не должно, у тебя где-то логика нарушена, можешь урл страницы дать?
 
Gisma, я Вам в личку написал. Тока вот не найду никак это сообщение в Sent Items, а экран типа "Сообщение отправлено" или "Сообщение не отправлено" я, видимо, проглядел :( Поэтому если оно не дошло, дайте знать please.
 
Все еще работаю нед меню. :angry:

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

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

 
Если честно, то я бы вставил функцию воспроизведения звука внутрь MM__SwapImage, для того, чтобы функция была одна...

Типа:
Код:
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; 
}
Но задержка по-прежнему наблюдается...
Дай-ка еще покопаться...
 
Все еще работаю нед меню. :P

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

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


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

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!