
- •Web программирование
- •231000.62 – “Программная инженерия”
- •Содержание
- •Введение
- •Дисциплина web программирование имеет целью обучить студентов разработке web - приложений, дать студентам теоретические знания и практические навыки в проектировании и реализации web-сайтов.
- •1. Протоколы и модели Internet-взаимодействия
- •1.1. Протоколы
- •1.2. Модель клиент-сервер
- •1.3. Формат описания адреса
- •2. Статическое web – программирование
- •2.1. Структура html-документа
- •2.2. Работа с текстом
- •2.3. Работа с таблицами
- •2.4. Работа с формами
- •2.5. Работа с фреймами
- •3. Каскадные таблицы стилей (css)
- •3.1. Синтаксис css
- •3.2. Использование css
- •3.3. Свойства css
- •4. Язык xml
- •4.1. Структура xml-документа
- •4.2. Правила создания xml-документа
- •4.3. Конструкции языка xml
- •4.3.1. Элементы данных
- •4.3.2. Комментарии
- •4.3.3. Атрибуты
- •4.3.4. Cпециальные символы
- •4.3.5. Директивы анализатора
- •4.3.6. Cdata
- •5. JavaScript сценарии
- •5.1. Клиентские и серверные сценарии
- •5.2. Операторы и функции JavaScript
- •5.3. Встроенные объекты JavaScript
- •5.4. Динамический html
- •5.5. Ajax технология
- •6. Работа с субд MySql
- •6.1. Особенности
- •6.2. Основные команды
- •7. Php. Динамическое web-программирование
- •7.1. Особенности
- •7.2. Php и объектно-ориентированное программирование
- •8. Проектирование полнофункциональных web-сайтов
- •8.1. Виды сайтов
- •8.2. Этапы проектирования web-сайтов
- •9. Задания для выполнения лабораторных работ
- •Последовательность выполнения задания
- •9.2. Задания для выполнения лабораторной работы №2 «Разработка сайта, содержащего карту-изображение с заданными активными зонами»
- •Варианты
- •Последовательность выполнения задания
- •9.3. Задания для выполнения лабораторной работы №3 «Разработка сайта, содержащего таблицы»
- •Варианты
- •9.4. Задания для выполнения лабораторной работы №4 «Разработка сайта “Электронный тест проверки знаний студентов изучаемых дисциплин”»
- •Варианты
- •Последовательность выполнения задания
- •9.5. Задания для выполнения лабораторной работы №5 «Разработка сайта с динамическими эффектами»
- •Варианты
- •Последовательность выполнения задания
- •9.6. Задания для выполнения лабораторной работы №6 «JavaScript. Горизонтальное и вертикальное меню»
- •Варианты
- •Последовательность выполнения задания
- •2.1 Горизонтальное меню
- •2.2 Вертикальное выпадающее меню
- •2.3 Вертикальное раскрывающееся меню
- •9.7. Задания для выполнения лабораторной работы №7
- •2. Ход работы
- •9.8. Задания для выполнения лабораторной работы №8 «Динамическая поддержка выбора значений из предлагаемого списка»
- •Варианты
- •Последовательность выполнения задания
- •9.9. Задания для выполнения лабораторной работы№9 «MySql. Проектирование базы данных и обеспечение прав доступа»
- •Варианты
- •Последовательность выполнения задания
- •9.10. Задания для выполнения лабораторной работы№10 «Разработка интернет-магазина»
- •Варианты
- •Последовательность выполнения задания
- •10. Контрольная работа
- •10.1. Назначение, цели и задачи контрольной работы
- •10.2. Требования к контрольной работе
- •10.3. Варианты заданий курсовой работы
- •11. Пример программы «Создание динамического эффекта» к выполнению лабораторной работы №5 «Разработка сайта с динамическими эффектами»
- •11.1. Плавное появление и исчезновение текста
- •11.2. Текст, движущийся на наблюдателя
- •11.3. Создание бегущих строк
- •11.4. Волнообразнодвижущийся текст
- •10.5. Текст, прилетающий по частям
- •10.6. Имитация движения текста по кругу в 3 d пространстве
- •10.7. Движение фонового рисунка страницы («летящие звезды», «эффект фейерверка», «падающий снег», «часы со стрелками»)
- •Заключение
- •Список литературных первоисточников
- •231000.62 – «Программная инженерия»
10.7. Движение фонового рисунка страницы («летящие звезды», «эффект фейерверка», «падающий снег», «часы со стрелками»)
Летящие звезды
<html lang="ru">
<head>
<title>Анимационные эффекты | Летящие звезды, эффект 1</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<style>
<!--
HTML, BODY
{
position : relative;
margin : 0px;
padding : 0px;
width : 100%;
height : 100%;
overflow : hidden;
}
BODY
{
background-color : black;
}
a
{
color : green;
text-decoration : none;
}
a:hover
{
text-decoration : underline;
}
/* -- */
table.c
{
width : 100%;
height : 100%;
border : none;
}
table.c td
{
text-align : center;
font : 14px "Courier New", Courier;
}
-->
</style>
</head>
<body onselectstart="return false">
<table class="c">
<tr>
<td valign="middle"><a
href="http://codeguru.ru"
alt="Исходники, статьи по программированию, скрипты"
title="Исходники, статьи по программированию, скрипты"
>http://codeguru.ru</a></td>
</tr>
</table>
<script type="text/javascript">
<!--
// Code by Victor V. Vakchturov (http://codeguru.ru)
// Настройки
var nStarCount = 128; // Количество звезд
var nMinSpeed = 1; // Минимальная скорость
var nMaxSpeed = 5; // Максимальная скорость
var nMinSize = 1; // Минимальный размер "звезд"
var nMaxSize = 3; // Максимальный размер "звезд"
// --
var aStars = new Array(nStarCount);
var nWidth = screen.width;
var nHeight = screen.height;
function N2ByteHexStr(n)
{
var str = (n & 0x0000FF).toString(16);
if(str.length < 2)
str = '0' + str;
return str;
}
function RGB_Str(r, g, b)
{
return '#' +
N2ByteHexStr(r) +
N2ByteHexStr(g) +
N2ByteHexStr(b);
}
function UpdateStarPos(i)
{
var oDiv = aStars[i];
oDiv.style.top = oDiv.y.toString() + "px";
oDiv.style.left = oDiv.x.toString() + "px";
}
function ResetStar(i, x)
{
var oDiv = aStars[i];
if(x < 0)
x = Math.round(Math.random() * nWidth);
oDiv.x = x;
oDiv.y = Math.round(Math.random() * nHeight);
// Можно было и не округлять скорость, а округлять координату x.
// Однако, при таком подходе (когда скорость - целое число), визуально
// можно выделить группы звезд, движущихся с одинаковой скоростью.
// Субъективно, это создает бОльший эффект перспективы, чем при
// использовании действительных значений скорости.
oDiv.nSpeed = Math.round(Math.random() * (nMaxSpeed - nMinSpeed)) + nMinSpeed;
oDiv.style.backgroundColor = RGB_Str( Math.round(Math.random() * 0xFF),
Math.round(Math.random() * 0xFF),
Math.round(Math.random() * 0xFF));
var nSize = Math.round(Math.random() * (nMaxSize - nMinSize)) + nMinSize;
oDiv.style.width = nSize.toString(10) + "px";
oDiv.style.height = oDiv.style.width;
UpdateStarPos(i);
}
function MoveStars()
{
for(var i = 0; i < nStarCount; i++)
{
aStars[i].x += aStars[i].nSpeed;
if(aStars[i].x > nWidth)
ResetStar(i, 0);
else
UpdateStarPos(i);
}
}
function GenerateStars()
{
var d = document;
var b = d.body;
for(var i = 0; i < nStarCount; i++)
{
var oDiv = aStars[i] = d.createElement("DIV");
b.appendChild(oDiv);
oDiv.style.overflow = "hidden";
oDiv.style.position = "absolute";
ResetStar(i, -1);
}
}
GenerateStars();
window.setInterval(MoveStars, 30);
// -->
</script>
</body>
</html>
Эффект фейерверка
<html lang="ru">
<head>
<title>Анимационные эффекты | Эффект фейерверка</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<style>
<!--
BODY
{
background : white;
}
TABLE
{
width : 100%;
height : 100%;
}
#ID_ANIMATE
{
position : relative;
width : 420px;
height : 256px;
overflow : hidden;
background : black;
}
#ID_ANIMATE DIV
{
position : absolute;
width : 1px;
height : 1px;
font-size : 0px;
z-index : 1;
}
#ID_ANIMATE #ID_LOGO
{
font : normal 14px "Courier New", monotype;
}
-->
</style>
</head>
<body>
<TABLE>
<TR>
<TD align="center" valign="middle">
<DIV ID="ID_ANIMATE">
<TABLE>
<TR>
<TD align="center" valign="middle" ID="ID_LOGO">
<span style="color: red;">Скрипт, создающий эффект фейерверка.<br>
Он может использоваться для размещения блоков поздравлений
или праздничных объявлений на сайте.</span>
<a style="color: blue;" href="http://codeguru.ru">codeguru.ru</a>
</TD>
</TR>
</TABLE>
</DIV>
</TD>
</TR>
</TABLE>
<script type="text/javascript">
<!--
// Code by Victor V. Vakchturov (http://codeguru.ru)
// Настройки
var nStarCount = 256; // Количество звезд фейерверка
var nMinSpeed = 2; // Минимальная скорость звезд
var nMaxSpeed = 4; // Максимальная скорость звезд
var nMinLive = 32; // Минимальное время жизни элемента
var nMaxLive = 42; // Максимальное время жизни элемента
var fDSpeed = 0.1; // Величина уменьшения скорости элементов
// --
var nTimerID = 0;
var aStars = new Array(nStarCount);
var oAnimate = document.getElementById("ID_ANIMATE");
var nWidth = oAnimate.offsetWidth;
var nHeight = oAnimate.offsetHeight;
// Еще настройки
var nMinX = Math.round(nWidth / 4);
var nMaxX = Math.round(nWidth / 4 * 3);
var nMinY = Math.round(nHeight / 4);
var nMaxY = Math.round(nHeight / 4 * 3);
function UpdateStarPos(i)
{
var oDiv = aStars[i];
oDiv.style.top = Math.round(oDiv.y).toString() + "px";
oDiv.style.left = Math.round(oDiv.x).toString() + "px";
}
function UpdateStarBgColor(i)
{
var oDiv = aStars[i];
oDiv.style.backgroundColor = "RGB(" +
Math.round(Math.random() * 0xFF).toString() + "," +
Math.round(Math.random() * 0xFF).toString() + "," +
Math.round(Math.random() * 0xFF).toString() + ")";
}
function ResetStar(i, x, y)
{
var oDiv = aStars[i];
oDiv.x = x;
oDiv.y = y;
oDiv.fSpeed = Math.random() * (nMaxSpeed - nMinSpeed) + nMinSpeed;
oDiv.fCos = Math.random() * 2 - 1;
oDiv.fSin = Math.random() * 2 - 1;
oDiv.nLive = Math.round(Math.random() * (nMaxLive - nMinLive) + nMinLive);
UpdateStarPos(i);
UpdateStarBgColor(i);
}
function MoveStars()
{
var bEndShow = true;
for(var i = 0; i < nStarCount; i++)
{
var oDiv = aStars[i];
if(oDiv.nLive)
{
oDiv.x += oDiv.fSpeed * oDiv.fCos;
oDiv.y += oDiv.fSpeed * oDiv.fSin;
oDiv.fSpeed -= fDSpeed;
if(oDiv.fSpeed < 0)
oDiv.fSpeed = 0;
UpdateStarPos(i);
UpdateStarBgColor(i);
oDiv.nLive--;
if(!oDiv.nLive)
oDiv.style.backgroundColor = "black";
bEndShow = false;
}
}
if(bEndShow)
{
window.clearInterval(nTimerID);
window.setTimeout(StartFireShow, 1500);
}
}
function StartFireShow()
{
var x = Math.round(Math.random() * (nMaxX - nMinX)) + nMinX;
var y = Math.round(Math.random() * (nMaxY - nMinY)) + nMinY;
for(var i = 0; i < nStarCount; i++)
ResetStar(i, x, y);
nTimerID = window.setInterval(MoveStars, 40);
}
function GenerateStars()
{
for(var i = 0; i < nStarCount; i++)
{
var oDiv = aStars[i] = document.createElement("DIV");
oDiv.style.width = "1px";
oDiv.style.height = "1px";
oDiv.style.overflow = "hidden";
oDiv.style.position = "absolute";
oAnimate.appendChild(oDiv);
}
}
GenerateStars();
StartFireShow();
// -->
</script>
</body>
</html>
Падающий снег
<html lang="ru">
<head>
<title>Анимационные эффекты | Падающий снег</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<style type="text/css">
<!--
BODY
{
background : #CCCCCC;
}
TABLE
{
width : 100%;
height : 100%;
}
#ID_ANIMATE
{
position : relative;
overflow : hidden;
background : white;
border : 1px solid #808080;
width : 384px;
height : 256px;
}
#ID_ANIMATE IMG
{
position : absolute;
width : 9px;
height : 9px;
font-size : 0px;
z-index : 1;
}
#ID_ANIMATE #ID_LOGO
{
font : normal 14px "Courier New", monotype;
}
-->
</style>
</head>
<body>
<TABLE>
<TR>
<TD align="center" valign="middle">
<DIV ID="ID_ANIMATE">
<TABLE>
<TR>
<TD align="center" valign="middle" ID="ID_LOGO">
<SPAN style="color: red;">Новогодний скрипт<br>Специально для книги<br><b>"JavaScript, изучи на примерах"</b><br>обновления:</SPAN> <a href="http://codeguru.ru">codeguru.ru</a>
</TD>
</TR>
</TABLE>
</DIV>
</TD>
</TR>
</TABLE>
<script type="text/javascript">
<!--
var oAnimate = document.getElementById("ID_ANIMATE");
var nWidth = oAnimate.offsetWidth;
var nHeight = oAnimate.offsetHeight;
var nFSize = 9;
var nCount = 30;
var nMaxSpeed = 4;
var strFlakeURL = "13_15_img/snowflake.gif";
// --
var aoFlakes = new Array(nCount);
// --
function UpdateFlakePos(nNum)
{
var oImg = aoFlakes[nNum];
oImg.style.top = oImg.m_nY.toString(10) + "px";
oImg.style.left = oImg.m_nX.toString(10) + "px";
}
function ResetFlake(nNum, bRandY)
{
var oImg = aoFlakes[nNum];
oImg.m_nX = Math.ceil(Math.random() * nWidth);
oImg.m_nY = bRandY ? Math.ceil(Math.random() * nHeight) : -nFSize;
oImg.m_nSpeed = Math.ceil(Math.random() * nMaxSpeed) + 1;
}
function OnTimer()
{
for(var i = 0; i < nCount; i++)
{
var oImg = aoFlakes[i];
oImg.m_nX += Math.ceil(Math.random() * 3 - 2);
oImg.m_nY += oImg.m_nSpeed;
if(oImg.m_nY > nHeight)
ResetFlake(i, false);
UpdateFlakePos(i);
}
}
// --
for(var i = 0; i < nCount; i++)
{
var oImg = document.createElement("IMG");
oImg.src = strFlakeURL;
oAnimate.appendChild(oImg);
aoFlakes[i] = oImg;
ResetFlake(i, true);
UpdateFlakePos(i);
}
window.setInterval(OnTimer, 50);
// -->
</script>
<noscript>
Внимание ! Ваш браузер не поддерживает выполнение скриптов, либо скрипты отключены.
</noscript>
</body>
</html>
Часы со стрелками
<html lang="ru">
<head>
<title>Анимационные эффекты | Часы со стрелками</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta http-equiv="Content-Language" content="ru">
<style type="text/css">
<!--
BODY
{
background : white;
}
TABLE.main,
TABLE.clock
{
width : 100%;
height : 100%;
font : bold 12px "Times New Roman";
}
#ID_ANIMATE
{
position : relative;
width : 128px;
height : 128px;
overflow : hidden;
background : #EEEEEE;
border : 1px solid black;
}
#ID_ANIMATE DIV
{
position : absolute;
width : 1px;
height : 1px;
overflow : hidden;
z-index : 1;
background : black;
}
-->
</style>
</head>
<body>
<TABLE class="main">
<TR>
<TD align="center" valign="middle">
<DIV ID="ID_ANIMATE"><TABLE class="clock" cellpadding="4" cellspacing="0">
<TR>
<TD colspan="3" align="center">12</TD>
</TR>
<TR>
<TD valign="middle">9</TD>
<TD width="100%" height="100%"></TD>
<TD valign="middle">3</TD>
</TR>
<TR>
<TD colspan="3" align="center">6</TD>
</TR>
</TABLE></DIV>
</TD>
</TR>
</TABLE>
<script type="text/javascript">
<!--
var oAnimate = document.getElementById("ID_ANIMATE");
var nWidth = oAnimate.offsetWidth;
var nHeight = oAnimate.offsetHeight;
var nHourLen = Math.round(nWidth / 32 * 5);
var nMinLen = Math.round(nWidth / 32 * 7);
var nSecLen = Math.round(nWidth / 32 * 10);
var aDivHour = new Array(nHourLen);
var aDivMin = new Array(nMinLen);
var aDivSec = new Array(nSecLen);
function GetArrowDim(val, r, d)
{
var fAngle = Math.PI / 2 - val * 2 * Math.PI / d;
return {
dx : r * Math.cos(fAngle),
dy : -r * Math.sin(fAngle)
};
}
function sgn(x)
{
return (x > 0) ? 1 : ((x < 0) ? -1 : 0);
}
function DrawArrow(raDivs, oArrDim)
{
var dx, dy;
var nCount;
if(Math.abs(oArrDim.dx) > Math.abs(oArrDim.dy))
{
dy = oArrDim.dy / Math.abs(oArrDim.dx);
dx = sgn(oArrDim.dx);
nCount = Math.abs(oArrDim.dx);
}
else
{
dx = oArrDim.dx / Math.abs(oArrDim.dy);
dy = sgn(oArrDim.dy);
nCount = Math.abs(oArrDim.dy);
}
var x = Math.round(nWidth / 2);
var y = Math.round(nHeight / 2);
for(var i = 0; i < raDivs.length; i++)
{
var oDiv = raDivs[i];
if(i < nCount)
{
oDiv.style.top = Math.round(y).toString() + "px";
oDiv.style.left = Math.round(x).toString() + "px";
oDiv.style.display = "block";
}
else
oDiv.style.display = "none";
x += dx;
y += dy;
}
}
function OnTimer()
{
var oDate = new Date();
DrawArrow(aDivHour, GetArrowDim(oDate.getHours(), nHourLen, 12));
DrawArrow(aDivMin, GetArrowDim(oDate.getMinutes(), nMinLen, 60));
DrawArrow(aDivSec, GetArrowDim(oDate.getSeconds(), nSecLen, 60));
}
function CreateDivs(raDivs, nCount)
{
for(var i = 0; i < nCount; i++)
{
raDivs[i] = document.createElement("DIV");
oAnimate.appendChild(raDivs[i]);
}
}
CreateDivs(aDivHour, nHourLen);
CreateDivs(aDivMin, nMinLen);
CreateDivs(aDivSec, nSecLen);
OnTimer();
window.setInterval(OnTimer, 1000);
// -->
</script>
<noscript>
Внимание ! Ваш браузер не поддерживает выполнение скриптов, либо скрипты отключены.
</noscript>
</body>
</html>/17/.