Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metods / Язык JavaScript.pdf
Скачиваний:
126
Добавлен:
26.03.2015
Размер:
482.69 Кб
Скачать

var y=parseInt(document.all.lv.style.top) //абсцисса левого края фотографии

var x=parseInt(document.all.lv.style.left) document.all.lv.style.top=y+dy

//Перемещение по OY document.all.lv.style.left=x+dx

//Перемещение по OX

}

</script>

</HTML>

В исходном состоянии фотография находится в верхнем левом углу экрана. Для запуска и остановки движения служит кнопка. Надпись на кнопке меняется. Если фотография неподвижна, то на кнопке написано Запустить, при движении Стоп. В браузере Internet Explorer надпись на кнопке можно изменить с помощью свойства innerText:

document.all.B1.innerText="Запустить" document.all.B1.innerText="Стоп"

Браузер Mozilla Firefox не поддерживает свойство innerText, поэтому в примере использовано свойство innerHTML, поддержи- ваемое обоими браузерами.

При нажатии кнопки выполняется функция Start_stop, служа- щая для запуска или остановки процесса proc. Если proc запущен, то через каждые 100 миллисекунд вызывается функция move, пе- ремещающая фотографию на 8 пикселей вправо и на 3 вниз.

Задача 5.1. Напишите сценарий перемещения цветного квад- рата по кругу. Траекторию удобно описывать параметрическими уравнениями:

x= R*

cos(t);

y=

R*sin(t) ,

где R –

радиус круга, 0

<= t <= 2π

Квадратом может служить контейнер <DIV> …</div> с цвет- ным фоном.

Перетаскивание

43

//запрет на перемещения

В сценариях для перетаскивания какого-либо предмета по ок- ну браузера используется событие onmousemove. Рассмотрим два варианта такого сценария. В обоих сценариях пользователь может мышкой передвигать фотографию по всему окну браузера. Первый вариант сценария (пример 5.2) применим только в браузере Internet Explorer, второй (пример 5.3) правильно выполняется в браузе-

рах Internet Explorer 6.0 и MozillaFirefox 2.0, но он сложнее для по-

нимания.

Пример 5.2.

<HTML><HEAD>

<TITLE>ПЕРЕМЕЩЕНИЕ ИЗОБРАЖЕНИЯ МЫШКОЙ</TITLE> </HEAD>

<BODY id="body1" STYLE="font-size:12pt"> <H2 align="center" style="color:#ff00ff">

Перетаскивание фотографии мышкой</h2>

<P align="center">Фотография начинает двигаться при попадании на неё курсора мыш-

ки<BR>

При захвате и перемещении фотографии не нажимайте кнопки мышки.<BR>

Для прекращения движения щёлкните левой кнопкой мышки</p>

<P align=right>

Примечание. Страница правильно отображается только в браузере<i>Internet Explorer 6.0 </i></p>

<img id="IM1" src="LV.jpg" " STYLE="position:absolute;top:200; left:10">

</BODY>

<SCRIPT>

flag=false

//Функция запускается при пересечении

//курсором мышки границы изображения function IM1.onmouseover()

{flag=true} // Перетаскивание разрешено

function IM1.onmousemove() { if (flag)

{//пересчёт координат изображения

44

document.all.IM1.style.top= event.clientY-170 document.all.IM1.style.left= event.clientX-120

}

}

//запрет на перемещения. Запускается при //отпускании кнопки мышки

function IM1.onclick() {flag=false } </SCRIPT>

<SCRIPT language="JavaScript" src="ProvBrows.js"></script> </HTML>

В примере 5.2 попадание курсора мышки на фотографию слу- жит сигналом к началу перемещения. При дальнейшем перемеще- нии курсора фотография передвигается вместе с ним. Пользова- тель при этом не должен нажимать на кнопки мышки, так как на-

жатием на левую кнопку прекращается движение и курсор можно убрать с фотографии. Нажатие правой кнопки вызывает, кроме прекращения движения, всплытие меню. В сценарии используются три функции:

IM1.onmouseover() для запуска процесса перетаскивания;

IM1.onmousemove для перетаскивания;

IM1.onclick() для прекращения перетаскивания.

Все три функции имеют специальные имена. IM1.onmouseover() означает, что эта функция выполняется, когда на объекте с ID=IM1 происходит событие onmouseоver(). Для функций со специальным именами не нужны операторы вызова.

Функция IM1.onmousemove() выполняется циклически в тече- ние всего времени нахождения курсора мышки в площади фотогра- фии. Так как частота выполнения функции небесконечна, то при

резком движении мышкой можно сорвать курсор с фотографии и прекратить перетаскивание, но такое завершение процесса не пре- дусмотрено правилами. Для управления процессом перетаскивания предназначена логическая переменная flag. Если щёлкнуть кнопкой мышки по фотографии, то выполнится функция IM1.onclick(), пере- менная flag примет значение false и функция IM1.onmousemove()

45

прекратит менять координаты фотографии. Можно будет убрать курсор с фотографии. Если снова хотя бы коснуться ее курсором, то выполнится функция IM1.onmouseover(), переменная flag примет значение true и перетаскивание возобновится.

Во втором варианте сценария (пример 5.3) не используются функции со специальными именами.

Пример 5.3.

<html> <head><title>Перетаскивание</title></head> <body onload="init()">

<h2 align="center" style="color:#ff00ff">

Перетаскивание квадрата мышкой</h2>

<h3 align="center">Установите курсор внутри красного квадрата, нажмите левую

кнопку мышки и тащите квадрат.<BR> Для освобождения квадрата от захвата

отпустите кнопку мышки</h3>

<P align=right>

Примечание. Страница правильно отображается в браузерах <i>Mozilla Firefox 2.0</i> и <i>Internet Explorer 6.0 </i>

</p>

<DIV id='kv' style="position:absolute;left:10;top:10; width:50;height:50;background-color:red"> <div>

</body>

<SCRIPT>

flag=false;

//Связывание событий с функциями function init()

{//Если мышка двигается, то выполняется

//ф-ция dragIt document.all.kv.onmousemove=dragIt

//Если кнопка мышки отпускается, // то - ф-ция osvobodi document.all.kv.onmouseup=osvobodi

document.all.kv.onmousedown=zachvat

46

}

function dragIt(evt)

{//Параметр evt создаётся самим браузером sobytie = (evt) ? evt : (window.event) ? window.event : "";

if(flag)

{document.all.kv.style.top =sobytie.clientY-25; document.all.kv.style.left =sobytie.clientX-25;

}

}

function osvobodi()

{//устанавливается запрет на перетаскивание flag=false;

}

function zachvat() {flag=true;//Перетаскивание разрешается

}

</SCRIPT>

</html>

В отличие от первого варианта во втором явно вызывается од- на функция. Строка

<body onload="init()">

предписывает при загрузке HTML-документа вызвать функцию init(). В результате ее выполнения события, происходящие с объ- ектом, имеющим идентификатор kv, будут вызывать выполнение функций dragIt, osvobodi и zachvat. Объект kv – это контейнер <DIV>, содержащий красный квадрат, перетаскиваемый мышкой.

Функция zachvat(), разрешающая начать перетаскивание, вы- полняется при нажатии кнопки мышки, когда её курсор находится на квадрате, т.е. когда происходит событие onmousedown. Функция osvobodi() выполняется при отпускании кнопки (событие onmouseup) и запрещает перетаскивание.

Функция dragIt(evt) связана с событием onmousemove и поэто-

му циклически выполняется в течение всего времени нахождения курсора мышки на фотографии. Параметр evt – это объект собы-

47