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

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

soloilya

#1
Есть меню с графическими кнопками, которые при наведении мыши менются, "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>
Но при совмещении этих функций ничего не пашет...

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

Gisma

#2
единственное, что могу сказать, совмести функции корректно
 
S

soloilya

#3
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 кб - все так же...

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

Gisma

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

soloilya

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

soloilya

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

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

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

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

ioni

Well-known member
11.05.2006
340
0
#7
Если честно, то я бы вставил функцию воспроизведения звука внутрь 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; 
}
Но задержка по-прежнему наблюдается...
Дай-ка еще покопаться...
 
K

Kuljok

#8
Все еще работаю нед меню. :p

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

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

http://www.avtoritetspb.ru/testsound.htm
ИМХО быстрее бы получилось просто переделать это же меню на flash, если дизайн позволяет.
 
S

soloilya

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

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