Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > вызов звуковой функции во фреймах


Автор: krems 22.8.2004, 13:01
у меня 2 фрейма:
<frameset rows="0,*" frameborder="0" framespacing="0">
<frame id="top1" src="top.htm" marginwidth="0" marginheight="0" scrolling="yes" frameborder="0">
<frame id="bottom" src="mi.htm" marginwidth="0" marginheight="0" scrolling="yes" frameborder="0">
</frameset>
---------------------
во фрейме top1:
<embed src="zebra.mp3" hidden=true autostart=false loop=true name="firstSound" MASTERSOUND>
<script language="JavaScript">
function playSound() {document.firstSound.play();}
function stopSound() {document.firstSound.stop();}
</script>
-----------------------------------------
проигрывание zebra.mp3 нужно вызвать из второго фрейма "bottom" (это делается, чтобы при переходе на другие страницы музыка не исчезала, и чтобы при помощи кнопки можно было её останавливать).
--------------------------------
почему такая вещь не срабатывает из любой страницы?
parent.window.top1.playSound();
---------
важный вопрос, заранее спасибо ответившим.

------------------------
только что решил проблему добавлением паузы
setTimeout('playSound()',100)
но почему не работает без паузы - непонятно...

Автор: Aliance 22.8.2004, 14:19
krems
Пауза обычно нужна для того, чтобы документ успел загрузиться; кстати, у тебя фреймы, может быть стоит в обоих поставить в обрабочике onunload=" return false;"

Цитата
почему такая вещь не срабатывает из любой страницы?
parent.window.top1.playSound();


Потому что тут ты дело имеешь с фреймами, замени parent.window.top1.playSound(); на parent.ИмяФрейма.playSound();

Автор: krems 22.8.2004, 14:56
Aliance,

спасибо, сейчас всё работает, но возникла другая проблема: пропадают <marquee> (они на каждой странице).

Автор: Aliance 22.8.2004, 15:00
krems
Э...если чесно не помню что это такое, это вроде бы движущийся текст ?
НЕсли я не ошибаюсь - то причина может быть в следующем: и этот тег и муз. файл содержат loop... В связи с этим что-то нужно изменить/дополнить, либо убрать движущийся текст - не обязательный же элемент дизайна =)
Пиши о результатах...

Автор: krems 22.8.2004, 15:15
что интересно, <marquee> не исчезает, когда в нижней части экрана:

mi.htm

то есть та страница, которая сразу загружается
<frame id="bottom" src="mi.htm" marginwidth="0" marginheight="0" scrolling="yes" frameborder="0">

а при переходе на другие страницы <marquee> исчезает.

как сделать, чтобы музыка не бесконечное количество раз крутилась, а определённое?
<embed src="zebra.mp3" hidden=true autostart=false loop=true name="firstSound" MASTERSOUND>

сделал музыку
loop=false
всё равно строка не бежит, придётся менять <marquee> на JS.

Aliance,
не знаете, где можно скачать скрипт бегущей строки не только справа налево, но и наоборот?

Автор: Aliance 22.8.2004, 16:36
krems
Ну кол-во проигрываний зависит от параметра loop, т.е. если у <marquee> поставить loop=2, то она два раза прокрутиться (если стоит круговая прокрутка); тоже и с музыкой. Поставь loop равный нужному кол-ву воспроизведения музыки, т.к. сейчас у Вас стоит loop=true, значит, что loop просто существует, кол-во же не указано rolleyes.gif

Цитата
не знаете, где можно скачать скрипт бегущей строки не только справа налево, но и наоборот?


С помощью JS, думаю, невозможно (только если манипулируя свойствами того же HTML), но зачем JavaScript'ом пользоваться, если всё можно прекрасно сделать в HTMLе?!
Код

<marquee loop="3" direction="right">бешущая строка</marquee>

Параметры:
loop="х", где х - кол-во прокруток
direction="х", где х может принимать значения right (слева направо) или left (справа налево)
cool.gif

Автор: korob2001 22.8.2004, 16:44
Цитата

<marquee loop="3" direction="right">бешущая строка</marquee>

Этот код в Navigatore работать не будет.

Автор: korob2001 22.8.2004, 17:51
Цитата

не знаете, где можно скачать скрипт бегущей строки не только справа налево, но и наоборот?

А чего качать, вот попоробуй запусти этот код. Коментарии не писал, только код, но там главное разобраться в одной из четырёх функций, так как они идентичны, каждая двигает текст в своём направлении. Не трудно подправить этот код для движения текста по диагонали.
Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script defer language="JavaScript" type="text/javascript">
 <!--//
  function goToRight() {
           // Проверка для совместимости IE и NN
  if ( document.all ) {
                    if ( mess.style.pixelLeft < 500 ) {
                         mess.style.pixelLeft += 2;
                         setTimeout("goToRight()", 50);
                    } else {
                         goToBottom();
                    }
  } else {
                    if ( document.mess.left < 500 ) {
                         document.mess.left += 2;
                         setTimeout("goToRight()", 50);
                    } else {
                         goToBottom();
                    }
              }
}

function goToBottom() {
              if ( document.all ) {
                    if ( mess.style.pixelTop < 500 ) {
                         mess.style.pixelTop += 2;
                         setTimeout("goToBottom()", 50);
                    } else {
                         goToLeft();
                    }
             } else {
                    if ( document.mess.top < 500 ) {
                         document.mess.top += 2;
                         setTimeout("goToBottom()", 50);
                    } else {
                         goToLeft();
                    }
             }
}

function goToLeft() {
              if ( document.all ) {
                    if ( mess.style.pixelLeft > 1 ) {
                         mess.style.pixelLeft -= 2;
                         setTimeout("goToLeft()", 50);
                    } else {
                         goToTop();
                    }
             } else {
                    if ( document.mess.left > 1 ) {
                         document.mess.left -= 2;
                         setTimeout("goToLeft()", 50);
                    } else {
                         goToTop();
                    }
            }
}
 
function goToTop() {
              if ( document.all ) {
                   if ( mess.style.pixelTop > 1 ) {
                        mess.style.pixelTop -= 2;
                        setTimeout("goToTop()", 50);
                   } else {
                        goToRight();
                   }
             } else {
                   if ( document.mess.top > 1 ) {
                        document.mess.top -= 2;
                        setTimeout("goToTop()", 50);
                   } else {
                        goToRight();
                   }
            }
}
 //-->
</script>
</head>

<body onLoad="goToRight()">
<div id="mess" style="position: absolute; left: 1; top: 1; font-weight: bold; font-color: #000000">Hello, world!</div>
</body>
</html>


PS: Этот код работает как в IE так и в Navigator'e. Если чего-то не поймёшь пиши, могу пояснить каждую строку.

Удачи

Автор: Sardar 22.8.2004, 20:47
Цитата(korob2001 @ 22.8.2004, 15:44)
Этот код в Navigatore работать не будет.

Нет этот код в старом пофигаторе работать не будет, в современных браузерах(семейство Gecko, ИЕ, Опера) тег marquee работает.
Обращатся к embed надо через:
Цитата
document.embeds.firstSound.play();


Покажи код, интересно посмотреть на глюк с пропаданием marquee smile.gif

Автор: korob2001 23.8.2004, 01:25
Цитата

Нет этот код в старом пофигаторе работать не будет, в современных браузерах(семейство Gecko, ИЕ, Опера) тег marquee работает.

В NetscapeNavigator4.0 у меня не работает, но ведь он не такой и старый. Что касается Navigator 7.1, в нём действительно всё работает. ;)

Автор: Gold Dragon 23.8.2004, 08:05
Цитата(korob2001 @ 23.8.2004, 02:25)
В NetscapeNavigator4.0 у меня не работает, но ведь он не такой и старый
biggrin.gif biggrin.gif biggrin.gif
Если не изменяет память, то он примерно 1997 года выпуска, поддерживает только CSS1 и с трудом JavaScript 1.2

Sardar
Не нашёл описание document.embeds.firstSound.play();, если не трудно поясни что с чем и в чем поддерживается.


Автор: korob2001 23.8.2004, 10:35
Цитата

Если не изменяет память, то он примерно 1997 года выпуска, поддерживает только CSS1 и с трудом JavaScript 1.2

;)
Да я не о том, когда его выпустили. Просто пока ещё достаточно много людей его юзают.

Автор: Sardar 23.8.2004, 16:05
Цитата(Red @ 23.8.2004, 07:05)
Не нашёл описание document.embeds.firstSound.play();, если не трудно поясни что с чем и в чем поддерживается.

Это коллекция всех "инородных обьектов" на странице, точно так же как document.links это коллекция всех сслыок на странице.

Автор: krems 26.8.2004, 10:48
korob2001,
я модифицировал эту функцию, надо чтобы только слева направо бежала строка:

function goToRight() {

if ( document.all ) {
if ( mess.style.pixelLeft < 700 ) {
mess.style.pixelLeft += 2;
setTimeout("goToRight()", 50);
} else {
mess.style.pixelLeft = 0; setTimeout("goToRight()", 50);
}
}
}

------------
но проблема, что если много слов, это не работает (2 строки бегут), может есть готовая функция получше?

Автор: korob2001 27.8.2004, 00:17
Вот нашёл скрипт на http://woweb.ru
http://script.woweb.ru/index.htm/id/1056315121

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)