lab_4js.htm 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. <HTML>
  2. <HEAD>
  3. <TITLE>Лабораторная работа 13 (4 JavaScript): Позиционирование и движение
  4. элементов на Web-странице</TITLE>
  5. <LINK REL=STYLESHEET TYPE="text/css" HREF="heads.css">
  6. </HEAD>
  7. <BODY>
  8. <H1> ЛАБОРАТОРНАЯ РАБОТА № 13 (4 JavaScript)</H1>
  9. <H2> <SPAN CLASS="beg" >Тема: </SPAN>Позиционирование и движение элементов на
  10. Web-странице</H2>
  11. <H2> <SPAN CLASS="beg" >Цель: </SPAN>
  12. Изучение средств и возможностей языка JavaScript для позиционирования и
  13. организации движения элементов на Web-странице</H2>
  14. <A NAME="beg"></A>
  15. <H3>ОГЛАВЛЕНИЕ</H3>
  16. <A CLASS="com" HREF="#1">1 Позиционирование элементов на Web-странице<BR>
  17. <A CLASS="com" HREF="#2">2 Организация движения объектов на Web-странице<BR>
  18. <A CLASS="com" HREF="#2.1">2.1 Изменение координат элемента с помощью
  19. циклического процесса<BR>
  20. <A CLASS="com" HREF="#2.2">2.2 Изменение координат элемента по событиям мышки<BR>
  21. <A CLASS="com" HREF="#2.3">2.3 Перетаскивание элементов<BR>
  22. <A CLASS="com" HREF="#3">3 Свойства и методы объекта Math<BR>
  23. <A CLASS="com" HREF="#prim1">Пример 1<BR>
  24. <A CLASS="com" HREF="#prim2">Пример 2<BR>
  25. <A CLASS="com" HREF="#prim3">Пример 3<BR>
  26. <A CLASS="com" HREF="#ind">Индивидуальные задания </SPAN><BR>
  27. <A NAME="1"></A>
  28. <H4>1 Позиционирование элементов на Web-странице</H4>
  29. <P>Режим позиционирования элемента Web-страницы, т.е. размещения его на экране, задается с
  30. помощью свойства CSS <SPAN CLASS="svoj">position</SPAN>, которое имеет
  31. следующие значения:
  32. <UL CLASS="list">
  33. <LI>static - положение элемента на экране задается браузером в соответствии с
  34. тем местом, которое элемент занимает в HTML-документе (значение задано по
  35. умолчанию, не использует координаты элемента и поэтому не может быть выбрано
  36. для организации движения элемента);
  37. <LI>relative - положение элемента на экране задается с помощью координат
  38. относительно того места на экране, куда браузер поместил бы элемент в режиме
  39. static;
  40. <LI>absolute - положение элемента на экране задается с помощью его координат
  41. относительно родителя.
  42. </UL>
  43. <P>При использовании режима позиционирования <SPAN CLASS="svoj">absolute</SPAN>,
  44. положение элемента на экране может быть задано с помощью таких свойств CSS:
  45. <UL CLASS="list">
  46. <LI>left - задает или возвращает горизонтальную позицию левой границы элемента
  47. относительно родителя (если родителем является тэг &lt;BODY&gt;, то относительно
  48. левой границы окна браузера);
  49. <LI>top - задает или возвращает вертикальную позицию верхней границы элемента
  50. относительно родителя (если родителем является тэг &lt;BODY&gt;, то относительно
  51. верхней границы окна браузера);
  52. <LI>right - задает или возвращает горизонтальную позицию правой границы элемента
  53. относительно родителя (если родителем является тэг &lt;BODY&gt;, то относительно
  54. правой границы окна браузера);
  55. <LI>bottom - задает или возвращает вертикальную позицию нижней границы элемента
  56. относительно родителя (если родителем является тэг &lt;BODY&gt;, то относительно
  57. нижней границы окна браузера).
  58. </UL>
  59. <P>Если для одного элемента заданы оба свойства:
  60. <SPAN CLASS="svoj">left</SPAN> и <SPAN CLASS="svoj">right</SPAN>, то свойство
  61. <SPAN CLASS="svoj">right</SPAN> игнорируется. При совместном задании свойств
  62. <SPAN CLASS="svoj">top</SPAN> и <SPAN CLASS="svoj">bottom</SPAN> предпочтение
  63. отдается свойству <SPAN CLASS="svoj">top</SPAN>.<BR>
  64. <SPAN CLASS="txt_abz">Значения </SPAN>свойств <SPAN CLASS="svoj">left</SPAN>,
  65. <SPAN CLASS="svoj">top</SPAN>, <SPAN CLASS="svoj">right</SPAN> и
  66. <SPAN CLASS="svoj">bottom</SPAN> могут быть заданы:
  67. <UL CLASS="list">
  68. <LI>в абсолютных единицах:
  69. <UL CLASS="list2">
  70. <LI>&nbsp;pt - в пунктах (1/72 дюйма);
  71. <LI>&nbsp;px - в пикселях;
  72. <LI>&nbsp;mm - в мм;
  73. <LI>&nbsp;cm - в см;
  74. <LI>&nbsp;in - в дюймах.
  75. </UL>
  76. <LI>в процентах от ширины родителя;
  77. <LI>предопределенным значением auto, которое задается по умолчанию и указывает
  78. на то, что элемент позиционируется браузером.
  79. </UL>
  80. <P>Если единицы измерения не указаны, то подразумевается, что они заданы в
  81. пикселях.<BR>
  82. <SPAN CLASS="txt_abz">Ниже </SPAN>приведен пример рисунка, расположенного в 200
  83. пикседях от левой границы экрана и в 100 пикселях от верхней границы экрана:<BR><BR>
  84. <SPAN CLASS="html">&lt;IMG NAME="imgs" SRC="fish.gif" STYLE="position:absolute;
  85. left:200;top:100">
  86. <P>Если попытаться сдвинуть этот рисунок на экране на 50 пикселей вправо с
  87. помощью выражения<BR><BR>
  88. <SPAN CLASS="html">imgs.style.left+=50,
  89. <P CLASS="ba">то это приведет к возникновению ошибки "Недопустимый аргумент" из-за того,
  90. что свойство <SPAN CLASS="svoj">left</SPAN> возвращает значение не в виде числа
  91. 200, а в виде строки "200px".<BR>
  92. <SPAN CLASS="txt_abz">Поэтому </SPAN>надо или воспользоваться функцией
  93. <SPAN CLASS="svoj">parseInt()</SPAN>, которая возвращает только число:<BR><BR>
  94. <SPAN CLASS="html">imgs.style.left=parseInt(imgs.style.left)+50,
  95. <P CLASS="ba">или вместо свойств <SPAN CLASS="svoj">left</SPAN>,
  96. <SPAN CLASS="svoj">top</SPAN>, <SPAN CLASS="svoj">right</SPAN> и
  97. <SPAN CLASS="svoj">bottom</SPAN> применять свойства:
  98. <UL CLASS="list">
  99. <LI>pixelLeft - задает или возвращает численное значение горизонтальной позиции левой
  100. границы элемента в пикселях;
  101. <LI>pixelTop - задает или возвращает численное значение вертикальной позиции верхней
  102. границы элемента в пикселях;
  103. <LI>pixelRight - задает или возвращает численное значение горизонтальной позиции
  104. правой границы элемента в пикселях;
  105. <LI>pixelBottom - задает или возвращает численное значение вертикальной позиции
  106. нижней границы элемента в пикселях.
  107. </UL>
  108. <P>В нашем примере вместо свойства <SPAN CLASS="svoj">left</SPAN> необходимо
  109. использовать свойство <SPAN CLASS="svoj">pixelLeft</SPAN>:<BR><BR>
  110. <SPAN CLASS="html">imgs.style.pixelLeft+=50;
  111. <P>Если же координаты элемента заданы в других единицах измерения, необходимо
  112. использовать свойства:
  113. <UL CLASS="list">
  114. <LI>posLeft - задает или возвращает численное значение горизонтальной позиции левой
  115. границы элемента в единицах измерения, заданных свойством left;
  116. <LI>posTop - задает или возвращает численное значение вертикальной позиции верхней
  117. границы элемента в единицах измерения, заданных свойством top;
  118. <LI>posRight - задает или возвращает численное значение горизонтальной позиции
  119. правой границы элемента в единицах измерения, заданных свойством right;
  120. <LI>posBottom - задает или возвращает численное значение вертикальной позиции
  121. нижней границы элемента в единицах измерения, заданных свойством bottom.
  122. </UL>
  123. <A NAME="2"></A>
  124. <TABLE WIDTH=70% ALIGN=CENTER BORDER=0>
  125. <TR><TD ALIGN=right>
  126. <A CLASS="out" HREF="#beg">Оглавление</A>
  127. </TABLE>
  128. <H4>2 Организация движения объектов на Web-странице</H4>
  129. <P>Движение элемента на Web-странице осуществляется путем изменения значений
  130. свойств, задающих его координаты.<BR>
  131. <SPAN CLASS="txt_abz">Изменение </SPAN>координат элемента может быть
  132. реализовано:
  133. <UL CLASS="list">
  134. <LI>путем программно организованного циклического процесса (см. <A CLASS="pri"
  135. HREF=#prim1>пример № 1</A></SPAN>);
  136. <LI>по событиям мышки (см. <A CLASS="pri" HREF=#prim2>пример № 2</A></SPAN>);
  137. <LI>путем"привязки" элемента к курсору мышки, т.е. путем задания координат
  138. элемента, равнымы координатам курсора мышки (см. <A CLASS="pri"
  139. HREF=#prim3>пример № 3</A></SPAN>);
  140. <LI>по событиям клавиатуры (см. описание лаб. работы № 5 "Работа с клавиатурой").
  141. </UL>
  142. <A NAME="2.1"></A>
  143. <TABLE WIDTH=70% ALIGN=CENTER BORDER=0>
  144. <TR><TD ALIGN=right>
  145. <A CLASS="out" HREF="#beg">Оглавление</A>
  146. </TABLE>
  147. <H4 CLASS="pod">2.1 Изменение координат элемента с помощью циклического
  148. процесса</H4>
  149. <P>Для организации циклического процесса могут быть использованы следующие методы
  150. объекта <SPAN CLASS="svoj">window</SPAN>:
  151. <UL CLASS="list">
  152. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">setTimeout("функция или
  153. выражение", интервал [,список аргументов функции, разделенных запятыми])</SPAN>:
  154. вычисляет значение выражения или вызывает функцию по истечению заданного
  155. интервала (в миллисекундах), если до этого не был вызван метод <SPAN
  156. STYLE="font:bold italic 5.5mm;color:#000070">clearTimeout()</SPAN>, может
  157. передавать в функцию заданные в списке аргументы, возвращает указатель на
  158. объект таймера, который может быть использован в методе <SPAN STYLE="font:bold
  159. italic 5.5mm;color:#000070">clearTimeout()</SPAN> для остановки и уничтожения
  160. таймера;
  161. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">clearTimeout(таймер)</SPAN>:
  162. останавливает таймер, установленный методом <SPAN STYLE="font:bold italic 5.5mm;
  163. color:#000070">setTimeout()</SPAN>;
  164. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">setInterval("функция или
  165. выражение", интервал [,список аргументов функции, разделенных запятыми])</SPAN>: вычисляет значение выражения или вызывает функцию каждый
  166. раз по истечению данного интервала (в миллисекундах), если до этого не был
  167. вызван метод <SPAN STYLE="font:bold italic 5.5mm;color:#000070">clearTimeout()</SPAN>,
  168. может передавать в функцию заданные в списке аргументы, возвращает указатель на
  169. объект таймера, который может быть использован в методе <SPAN STYLE="font:bold
  170. italic 5.5mm;color:#000070">clearTimeout()</SPAN> для остановки и уничтожения
  171. таймера;
  172. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">clearInterval(таймер)</SPAN>:
  173. останавливает таймер, установленный методом <SPAN STYLE="font:bold italic 5.5mm;color:
  174. #000070">setInterval()</SPAN>.
  175. </UL>
  176. <P>Использование метода <SPAN CLASS="svoj">setTimeout()</SPAN> для организации
  177. движения элемента показано в <A CLASS="pri" HREF=#prim1>примере № 1</A>, где
  178. реализовано движение элемента Web-страницы - буквы Z, заданной с помощью тэга
  179. &lt;P&gt;, по траектории в виде синусоиды ():
  180. <A NAME="prim1"></A><BR>
  181. <TABLE WIDTH=70% ALIGN=CENTER BORDER=0>
  182. <TR><TD ALIGN=right>
  183. <A CLASS="out" HREF="#beg">Оглавление</A>
  184. </TABLE>
  185. <P><A CLASS="out" HREF="js_pr4-1.htm">Пример 1</A><BR><BR>
  186. <SPAN CLASS="html">&lt;HTML&gt;<BR>
  187. <SPAN CLASS="html">&lt;HEAD&gt;<BR>
  188. <SPAN CLASS="html">&lt;TITLE&gt;Изменение координат элемента с помощью циклического процесса&lt;/TITLE&gt;<BR>
  189. <SPAN CLASS="html">&lt;SCRIPT&gt;<BR>
  190. <SPAN CLASS="html">x=0; y=100; dx=0; dy=0;<BR>
  191. <SPAN CLASS="html">function f(x) { return 60*Math.sin(x*Math.PI/180);}<BR>
  192. <SPAN CLASS="html">function moveTxt()<BR>
  193. <SPAN CLASS="html">{<BR>
  194. <SPAN CLASS="html">if ((z.style.pixelLeft&lt;document.body.clientWidth-30)
  195. && (z.style.pixelTop&gt;30))<BR>
  196. <SPAN CLASS="html">{<BR>
  197. <SPAN CLASS="html">z.style.left=x+dx;<BR>
  198. <SPAN CLASS="html">z.style.top=y+dy-f(x+dx);<BR>
  199. <SPAN CLASS="html">dx+=20;<BR>
  200. <SPAN CLASS="html">dy+=7;<BR>
  201. <SPAN CLASS="html">setTimeout("moveTxt()",125);<BR>
  202. <SPAN CLASS="html">}<BR>
  203. <SPAN CLASS="html">}<BR>
  204. <SPAN CLASS="html">&lt;/SCRIPT&gt;<BR>
  205. <SPAN CLASS="html">&lt;/HEAD&gt;<BR>
  206. <SPAN CLASS="html">&lt;BODY&gt;<BR>
  207. <SPAN CLASS="html">&lt;P ID="z" STYLE="color:blue;font:8mm;
  208. position:absolute;left:0;top:100"<BR>
  209. <SPAN CLASS="html_par">onClick="moveTxt()"&gt;Z&lt;/P&gt;<BR>
  210. <SPAN CLASS="html">&lt;/BODY&gt;<BR>
  211. <SPAN CLASS="html">&lt;/HTML&gt;<BR>
  212. <P>В примере 1 с помощью функции <SPAN CLASS="svoj">f(x)</SPAN> реализовано
  213. движение объекта справа налево и сверху вниз по синусоиде
  214. <SPAN CLASS="svoj">y=60sin(x)</SPAN>. Поскольку траектория указана в виде
  215. тригометрической функции, для ее задания был использован объект
  216. <SPAN CLASS="svoj">Math</SPAN>, свойства и методы которого описаны в разделе 3.
  217. При этом было выполнено преобразование аргумента функции
  218. <SPAN CLASS="svoj">sin(x)</SPAN> из градусов в радианы. Направление и скорость
  219. движения объекта зависит от величины и знака приращений его координат
  220. <SPAN CLASS="svoj">dx</SPAN> и <SPAN CLASS="svoj">dy</SPAN>. На скорость
  221. движения также влияет промежуток времени, через который эти приращения
  222. происходят (2-й параметр метода <SPAN CLASS="svoj">setTimeout()</SPAN>).<BR>
  223. <SPAN CLASS="txt_abz">Выбор </SPAN>амплитуды и скорости движения в примере 1
  224. осуществлен из соображений наглядности.<BR>
  225. <SPAN CLASS="txt_abz">По </SPAN>щелчку мышки по букве Z вызывается функция
  226. <SPAN CLASS="svoj">moveTxt()</SPAN>, которая осуществляет движение этого элемента
  227. из точки окна браузера с координатами: <SPAN CLASS="svoj">left=0;
  228. top=100</SPAN> путем задания приращений его координатам
  229. <SPAN CLASS="svoj">left</SPAN> и <SPAN CLASS="svoj">top</SPAN>:<BR><BR>
  230. <SPAN CLASS="html">z.style.left=x+dx;<BR>
  231. <SPAN CLASS="html">z.style.top=y+dy-f(x+dx);<BR>
  232. <P CLASS="ba">до тех пор, пока он не приблизится к границам окна браузера
  233. (граница не достигается, чтобы буква Z оставалась в области полной видимости).<BR>
  234. <SPAN CLASS="txt_abz">Значения левой и нижней границы </SPAN> окна браузера
  235. определяются с помощью свойств тэга &lt;BODY&gt; <SPAN CLASS="svoj">clientWidth </SPAN> и
  236. <SPAN CLASS="svoj">clientHeight</SPAN>. Эти свойства могут быть использованы
  237. для определения размеров любых элементов Web-страницы, которые имеют ширину и
  238. высоту.<BR>
  239. <SPAN CLASS="txt_abz">При </SPAN>использовании альтернативных методов
  240. <SPAN CLASS="svoj">setInterval()</SPAN> и
  241. <SPAN CLASS="svoj">clearInterval()</SPAN> описание функции
  242. <SPAN CLASS="svoj">moveTxt()</SPAN> необходимо несколько изменить:<BR><BR>
  243. <SPAN CLASS="html">function moveTxt()<BR>
  244. <SPAN CLASS="html">{<BR>
  245. <SPAN CLASS="html">if ((z.style.pixelLeft&lt;document.body.clientWidth-30)
  246. && (z.style.pixelTop&gt;30))<BR>
  247. <SPAN CLASS="html">{<BR>
  248. <SPAN CLASS="html">z.style.left=x+dx;<BR>
  249. <SPAN CLASS="html">z.style.top=y+dy-f(x+dx);<BR>
  250. <SPAN CLASS="html">dx+=20;<BR>
  251. <SPAN CLASS="html">dy+=7;<BR>
  252. <SPAN CLASS="html">}<BR>
  253. <SPAN CLASS="html">else clearInterval(timer);<BR>
  254. <SPAN CLASS="html">}<BR>
  255. <P>Кроме того, вызов функции <SPAN CLASS="svoj">moveTxt()</SPAN> в этом случае
  256. следует выполнять так:<BR><BR>
  257. <SPAN CLASS="html_par">onClick="timer=setInterval('moveTxt()',125);"
  258. <P>
  259. <A NAME="2.2"></A>
  260. <TABLE WIDTH=70% ALIGN=CENTER BORDER=0>
  261. <TR><TD ALIGN=right>
  262. <A CLASS="out" HREF="#beg">Оглавление</A>
  263. </TABLE>
  264. <H4 CLASS="pod">2.2 Изменение координат элемента по событиям мышки</H4>
  265. <P>Движение элемента Web-страницы по экрану кроме рассмотренного выше способа
  266. изменения его координат с помощью программно организованного циклического
  267. процесса, может осуществить сам пользователь Web-сайта с помощью мышки.<BR>
  268. <SPAN CLASS="txt_abz">В </SPAN><A CLASS="pri" HREF=#prim2>примере № 2</A>
  269. описана функция <SPAN CLASS="svoj">runRef()</SPAN>, которая каждый раз при
  270. достижении указателем мышки ссылки <I STYLE="color:red"><U>Ссылка</U></I> или
  271. при движении указателя мышки по ссылке выполняет приращения координат этого
  272. элемента, реализуя эффект "убегающей" от пользователя ссылки. Все его попытки
  273. щелкнуть по ссылке, чтобы загрузить новую страницу
  274. (<SPAN CLASS="svoj">js_1.htm</SPAN>), оказываются безрезультатными.<BR>
  275. <SPAN CLASS="txt_abz">С </SPAN>помощью переменных <SPAN CLASS="svoj">dx</SPAN>
  276. и <SPAN CLASS="svoj">dy</SPAN>, которые меняют свой знак на противоложный при
  277. достижении соответственно вертикальных или горизонтальных границ окна браузера,
  278. реализовано отражение ссылки при движении по экрану от его границ.<BR>
  279. <SPAN CLASS="txt_abz">Вызов </SPAN>функции <SPAN CLASS="svoj">runRef()</SPAN>
  280. как по событию <SPAN CLASS="svoj">Mousemove</SPAN>, так и по событию
  281. <SPAN CLASS="svoj">Mouseover</SPAN> обеспечивает более надежную защиту ссылки
  282. от щелчка мышки.
  283. <A NAME="prim2"></A><BR>
  284. <TABLE WIDTH=70% ALIGN=CENTER BORDER=0>
  285. <TR><TD ALIGN=right>
  286. <A CLASS="out" HREF="#beg">Оглавление</A>
  287. </TABLE>
  288. <P><A CLASS="out" HREF="js_pr4-2.htm">Пример 2</A><BR><BR>
  289. <SPAN CLASS="html">&lt;HTML&gt;<BR>
  290. <SPAN CLASS="html">&lt;HEAD&gt;<BR>
  291. <SPAN CLASS="html">&lt;TITLE&gt;Организация движения элементов Web-страницы с помощью <BR>
  292. <SPAN CLASS="html">мышки &lt;/TITLE&gt;<BR>
  293. <SPAN CLASS="html">&lt;SCRIPT&gt;<BR>
  294. <SPAN CLASS="html">dx=10; dy=10;<BR>
  295. <SPAN CLASS="html">function runRef()<BR>
  296. <SPAN CLASS="html">{<BR>
  297. <SPAN CLASS="html">if ((parseInt(m.style.left)<25) || <BR>
  298. <SPAN CLASS="html_par">(parseInt(m.style.left)>document.body.clientWidth-25)) dx=-dx;<BR>
  299. <SPAN CLASS="html">if ((m.style.posTop<25) || <BR>
  300. <SPAN CLASS="html_par">(m.style.posTop>document.body.clientHeight-25)) dy=-dy;<BR>
  301. <SPAN CLASS="html"> m.style.pixelLeft+=dx;<BR>
  302. <SPAN CLASS="html">m.style.pixelTop+=dy;<BR>
  303. <SPAN CLASS="html">}<BR>
  304. <SPAN CLASS="html">&lt;/SCRIPT&gt;<BR>
  305. <SPAN CLASS="html">&lt;/HEAD&gt;<BR>
  306. <SPAN CLASS="html">&lt;BODY"&gt;<BR>
  307. <SPAN CLASS="html">&lt;A NAME="m" HREF="js_1.htm"<BR>
  308. <SPAN CLASS="html_par">STYLE="position:absolute;left:100;top:100;color:red"<BR>
  309. <SPAN CLASS="html_par">onMousemove="runRef()"<BR>
  310. <SPAN CLASS="html_par">onMouseover="runRef()"&gt;
  311. <SPAN CLASS="htmlp">Ссылка
  312. <SPAN CLASS="htmlba">&lt;/A&gt;<BR>
  313. <SPAN CLASS="html">&lt;/BODY&gt;<BR>
  314. <SPAN CLASS="html">&lt;/HTML&gt;<BR>
  315. <A NAME="2.3"></A>
  316. <TABLE WIDTH=70% ALIGN=CENTER BORDER=0>
  317. <TR><TD ALIGN=right>
  318. <A CLASS="out" HREF="#beg">Оглавление</A>
  319. </TABLE>
  320. <H4 CLASS="pod">2.3 Перетаскивание элементов</H4>
  321. <P>Перетаскивание элементов Web-страницы с помощью мышки реализуется путем
  322. присваивания текущим координатам перемещаемого элемента текущих координат мышки.
  323. Доступ к координатам мышки можно осуществить, используя такие свойства объекта
  324. <SPAN CLASS="svoj">event</SPAN>:
  325. <UL CLASS="list">
  326. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">clientX</SPAN> -
  327. возвращает горизонтальную координату курсора мышки относительно клиенткой
  328. части окна (без учета рамок, заголовка, строки меню, панели инстументов и
  329. строки состояния);
  330. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">clientY</SPAN> -
  331. возвращает вертикальную координату курсора мышки относительно клиенткой части
  332. окна (без учета рамок, заголовка, строки меню, панели инстументов и строки
  333. состояния);
  334. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">offsetX</SPAN> -
  335. возвращает горизонтальную координату курсора мышки относительно элемента
  336. страницы, вызвавшего это событие;
  337. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">offsetY</SPAN> -
  338. возвращает вертикальную координату курсора мышки относительно элемента
  339. страницы, вызвавшего это событие;
  340. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">screenX</SPAN> -
  341. возвращает горизонтальную координату курсора мышки относительно экрана;
  342. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">screenY</SPAN> -
  343. возвращает вертикальную координату курсора мышки относительно экрана;
  344. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">x</SPAN> - возвращает
  345. горизонтальную координату курсора мышки относительно родительского элемента;
  346. <LI><SPAN STYLE="font:bold italic 5.5mm;color:#000070">y</SPAN> - возвращает
  347. вертикальную координату курсора мышки относительно родительского элемента.
  348. </UL>
  349. <P>В <A CLASS="pri" HREF=#prim3>примере № 3</A> создается Web-страница,
  350. содержащая три элемента - рисунок и два слова "ТЕКСТ" одинакового размера, но
  351. разных цветов.
  352. <A NAME="prim3"></A><BR>
  353. <TABLE WIDTH=70% ALIGN=CENTER BORDER=0>
  354. <TR><TD ALIGN=right>
  355. <A CLASS="out" HREF="#beg">Оглавление</A>
  356. </TABLE>
  357. <P><A CLASS="out" HREF="js_pr4-3.htm">Пример 3</A><BR><BR>
  358. <SPAN CLASS="html">&lt;HTML&gt;<BR>
  359. <SPAN CLASS="html">&lt;HEAD&gt;<BR>
  360. <SPAN CLASS="html">&lt;TITLE&gt;Перетаскивание элементов Web-страницы&lt;/TITLE&gt;<BR>
  361. <SPAN CLASS="html">&lt;SCRIPT&gt;<BR>
  362. <SPAN CLASS="html">var n=0; l=0;<BR>
  363. <SPAN CLASS="html">function drag()<BR>
  364. <SPAN CLASS="html">{<BR>
  365. <SPAN CLASS="html">with (document.all(n).style)<BR>
  366. <SPAN CLASS="html">{<BR>
  367. <SPAN CLASS="html">position="absolute";<BR>
  368. <SPAN CLASS="html">/* window.status= "n="+n+" z-index="+l+" left="+pixelLeft+"
  369. top="+pixelTop+<BR>
  370. <SPAN CLASS="html">" x="+event.x+" y="+event.y; */<BR>
  371. <SPAN CLASS="html">left=event.x;<BR>
  372. <SPAN CLASS="html">top=event.y;<BR>
  373. <SPAN CLASS="html">zIndex=l;<BR>
  374. <SPAN CLASS="html">}<BR>
  375. <SPAN CLASS="html">}<BR>
  376. <SPAN CLASS="html">&lt;/SCRIPT&gt;<BR>
  377. <SPAN CLASS="html">&lt;/HEAD&gt;<BR>
  378. <SPAN CLASS="html">&lt;BODY onClick="n=event.srcElement.sourceIndex;"<BR>
  379. <SPAN CLASS="html_par">onContextmenu="if(l==2) l=0; else l++;return false"<BR>
  380. <SPAN CLASS="html_par">onMousemove="drag()"><BR>
  381. <SPAN CLASS="html">&lt;IMG SRC="fish.gif" &gt;<BR>
  382. <SPAN CLASS="html">&lt;P STYLE="color:#0FF;font:8mm"&gt;TEXT1<BR>
  383. <SPAN CLASS="html">&lt;P STYLE="color:#F0F;font:8mm"&gt;TEXT2<BR>
  384. <SPAN CLASS="html">&lt;/BODY&gt;<BR>
  385. <SPAN CLASS="html">&lt;/HTML&gt;<BR>
  386. <P>При щелчке мышки по любому из этих объектов (по событию
  387. <SPAN CLASS="svoj">Click</SPAN>) для отмеченного объекта устанавливается режим
  388. перетаскивания: в переменную <SPAN CLASS="svoj">n</SPAN> заносится порядковый
  389. номер этого элемента Web-страницы, например, для рисунка: n=5, для первого
  390. текста: n=6, для второго: n=7 (при щелчке по свободному пространству окна
  391. браузера n принимает значение 4 - номер тэга BODY).<BR>
  392. <SPAN CLASS="txt_abz">Режим </SPAN>перетаскивания отмеченного объекта
  393. реализуется путем вызова при движении мышки (по событию
  394. <SPAN CLASS="svoj">Mousemove</SPAN>) функции
  395. <SPAN CLASS="svoj">drag()</SPAN>, которая выполняет следующие действия:
  396. <UL CLASS="list">
  397. <LI>устанавливает для объекта с номером n абсолютное позиционирование;
  398. <LI>присваивает горизонтальной и вертикальной координатам этого объекта
  399. соответственно горизонтальную и вертикальную координату указателя мышкки,
  400. что позволяет ему перемещаться за движущейся мышкой;
  401. <LI>устанавливает для объекта текущее значение свойства
  402. <SPAN CLASS="svoj">z-index</SPAN>, заданное в переменной l.
  403. </UL>
  404. <P>При щелчке правой кнопкой мышки (по событию
  405. <SPAN CLASS="svoj">Contextmenu</SPAN>) циклически меняется значение переменной
  406. l (0,1,2,0,...), задающей текущее значение свойства
  407. <SPAN CLASS="svoj">z-index</SPAN>, что позволяет любому объекту при задании
  408. соответствующего значения или перекрывать другие объкты Web-страницы, или
  409. располагаться под ними.<BR>
  410. <SPAN CLASS="txt_abz">Для </SPAN>отмены режима перетаскивания отмеченного объекта
  411. необходимо повторно щелчкнуть мышкой. При этом в переменную
  412. <SPAN CLASS="svoj">n</SPAN> заносится номер уже нового объекта - того, который
  413. в момент щелчка находился под перетаскиваемым объектом. Это связано с тем, что
  414. при движении координаты указателя мышки на пиксел опережают координаты самого
  415. объекта. В этом случае для нового объекта устанавливается режим перетаскивания
  416. (если только этим объектом не является тэг BODY).<BR>
  417. <SPAN CLASS="txt_abz">Добавим</SPAN>, что закомментированные строки функции
  418. <SPAN CLASS="svoj">drag()</SPAN> были использованы при отладке программы для вывода
  419. в поле статуса окна браузера значений таких контрольных данных: номер,
  420. <SPAN CLASS="svoj">z-index</SPAN> и координаты перетаскиваемого объекта, а
  421. также координаты мышки.
  422. <A NAME="3"></A>
  423. <TABLE WIDTH=70% ALIGN=CENTER BORDER=0>
  424. <TR><TD ALIGN=right>
  425. <A CLASS="out" HREF="#beg">Оглавление</A>
  426. </TABLE>
  427. <H4>3 Свойства и методы объекта Math</H4>
  428. <P>Объект <SPAN CLASS="svoj">Math</SPAN> позволяет программистам использовать
  429. математические константы и функции при написании программ на JavaScript.
  430. Имеет следующие свойства:
  431. <UL CLASS="list">
  432. <LI>E - возвращает константу Эйлера (e);
  433. <LI>LN10 - возвращает значение ln 10;
  434. <LI>LN2 - возвращает значение ln2;
  435. <LI>LOG10E - возвращает значение lg e;
  436. <LI>LOG2E - возвращает значение log<SUB>2</SUB>e;
  437. <LI>PI - возвращает значение 3,14159...
  438. </UL>
  439. <P CLASS="ba">и методы:
  440. <UL CLASS="list">
  441. <LI>abs(число) - возвращает абсолютное значение аргумента;
  442. <LI>acos(число) - возвращает арккосинус аргумента в радианах;
  443. <LI>asin(число) - возвращает арксинус аргумента в радианах;
  444. <LI>atan(число) - возвращает арктангенс аргумента в радианах;
  445. <LI>atan2(x, y) - возвращает угол в радианах между горизонтальной осью и
  446. прямой проведенной через начало координат и точку с координатми x, y;
  447. <LI>ceil(число) - возвращает ближайшее целое число, большее или равное аргументу;
  448. <LI>cos(число) - возвращает косинус аргумента в радианах;
  449. <LI>exp(число) - возвращает значение e<SUP>число</SUP>;
  450. <LI>floor(число) - возвращает ближайшее целое число, меньше аргумента или равное ему;
  451. <LI>log(число) - возвращает натуральный логарифм аргумента;
  452. <LI>max(список аргументов, разделенный запятыми) - возвращает максимальный из
  453. аргументов; если не задан ни один аргумент возвращает значение NEGATIVE
  454. INFINITY ("минус бесконечность"); если один из аргументов равен NaN (Not
  455. a Number - "не число"), возвращается NaN;
  456. <LI>min(список аргументов, разделенный запятыми) - возвращает минимальный из
  457. аргументов; если не задан ни один аргумент возвращает значение POSITIVE
  458. INFINITY ("плюс бесконечность"); если один из аргументов равен NaN,
  459. возвращается NaN;
  460. <LI>pow(основание, порядок) - возвращает значение основание<SUP>порядок</SUP>;
  461. <LI>random() - возвращает псевдослучайное число от 0 включительно до 1
  462. исключительно;
  463. <LI>round(число) - возвращает значение оргумента, округленное до ближайшего
  464. целого;
  465. <LI>sin(число) - возвращает синус аргумента в радианах;
  466. <LI>sqrt(число) - возвращает квадратный корень от аргумента;
  467. <LI>tan(число) - возвращает тангенс аргумента в радианах.
  468. </UL>
  469. <A NAME="ind"></A>
  470. <TABLE WIDTH=70% ALIGN=CENTER BORDER=0>
  471. <TR><TD ALIGN=right>
  472. <A CLASS="out" HREF="#beg">Оглавление</A>
  473. </TABLE>
  474. <H4>Индивидуальные задания </H4>
  475. <P>На языке JavaScript разработать программные средства, выполняющие следующие действия:<BR><BR>
  476. <UL CLASS="list">
  477. <LI>по событию 1 отметить указанный в таблице объект, изменив одно или несколько
  478. его свойств;
  479. <LI> по событию 2 осуществить движение этого объекта из заданной точки (x,y)
  480. экрана по траектории, заданной функцией f(x) и направлением ("куда") в соответствии с
  481. указанным режимом:
  482. <UL CLASS="list2">
  483. <LI>1 - до достижения границ окна браузера;
  484. <LI>2 - до достижения границ окна браузера после однократного отражения;
  485. <LI>2 - непрерывное движение с многократными отражениями от границ окна
  486. браузера.
  487. надо выполнять с отражением от границ окна браузера.
  488. </UL>
  489. <LI>амплитуду и скорость движения выбирать из соображения наглядности.
  490. </UL>
  491. <P> <table border=1 align=center width="100%" style="font:5mm;color:#00a">
  492. <tr><th rowspan=2>№<th rowspan=2>Объект<th colspan=4>Параметры движения
  493. <th colspan=2>События
  494. <tr><th>(x,y)<th>f(x)<th>Куда<th>Режим<th>1<th>2
  495. <tr><td>1<td>Слово<td>X=0;Y=450<td>2x+5<td>Вправо/вверх<td>3<td>Click<td>Click
  496. <tr><td>2<td>Рисунок<td>X=300;Y=400<td>25cos(x)<td>Вверх<td>2<td>Click<td>Contextmenu
  497. <tr><td>3<td>Ссылка<td>X=450;Y=220<td>40sin(3x)<td>Влево<td>2<td>Click<td>Mouseover
  498. <tr><td>4<td>Таблица<td>X=600;Y=400<td>x*x/500<td>Влево/вверх<td>3<td>Click><td>Mousemove
  499. <tr><td>5<td>Буква<td>X=200;Y=0<td>exp(x/100)<td>Вниз<td>2<td>Dblclick<td>Dblclick
  500. <tr><td>6<td>Рисунок<td>X=10;Y=300<td>30log(x+10)<td>Вправо<td>2<td>Dblclick<td>Contextmenu
  501. <tr><td>7<td>Ссылка<td>X=600;Y=200<td>10tan(x)<td>Влево<td>2<td>Dblclick<td>Mouseover
  502. <tr><td>8<td>Слово<td>X=50;Y=50<td>0.001x*x+x<td>Вправо/вниз<td>3<td>Dblclick<td>Mousemove
  503. <tr><td>9<td>Кнопка <td>X=500;Y=5<td>60sin(x*x)<td>Влево/вниз<td>1<td>Contextmenu<td>Contextmenu
  504. <tr><td>10<td>Буква<td>X=250;Y=450<td>25cos(2x+1)<td>Вверх<td>2<td>Contextmenu<td>Click
  505. <tr><td>11<td>Кнопка<td>X=350;Y=0<td>0.5exp(x/250)<td>Вниз<td>2<td>Contextmenu<td>Dblclick
  506. <tr><td>12<td>Ссылка <td>X=75;Y=175<td>50log(x+5)-50<td>Вправо<td>3<td>Contextmenu<td>Mouseover
  507. <tr><td>13<td>Форма<td>X=20;Y=420<td>0.2x+45<td>Вправо/вверх<td>3<td>Contextmenu<td>Mousemove
  508. <tr><td>14<td>Список OL<td>X=550;Y=20<td>-2.5x+15<td>Влево/вниз<td>1<td>Mouseover<td>Click
  509. <tr><td>15<td>Число<td>X=650;Y=510<td>1000/(x+25)<td>Влево/вверх<td>1<td>Mouseover<td>Dblclick
  510. <tr><td>16<td>IFRAME<td>X=20;Y=80<td>x*x*x/(x*x+125))<td>Вправо/вниз<td>3<td>Mouseover<td>Contextmenu
  511. <tr><td>17<td>Список UL<td>X=20;Y=330<td>x<sup>0.75</sup>-15<td>Вправо<td>2<td>Mouseover<td>Mouseout
  512. <tr><td>18<td>radio<td>X=620;Y=280<td>x<sup>1.05</sup>-x<td>Влево<td>2<td>Mousemove<td>Click
  513. <tr><td>19<td>checkbox<td>X=20;Y=440<td>x<sup>0.5</sup>-50<td>Вправо/вверх<td>3<td>Mousemove<td>Dblclick
  514. <tr><td>20<td>SELECT<td>X=580;Y=590<td>(x*x+x+10)<sup>0.5</sup><td>Влево/вверх<td>2<td>Mousemove<td>Contextmenu
  515. </table>